From 381ec2569813ba2fbd63183737a0341ecae38c5f Mon Sep 17 00:00:00 2001 From: Fei Long Wang Date: Fri, 28 Aug 2015 15:17:59 +1200 Subject: [PATCH] Fix duplicated notification Now when the pooling is enabled, notification will be triggered two times because the subscription controller of pooling is also in the pipeline. This patch fixes it by checking the subscription controller type. Closes-Bug: #1489686 Change-Id: I55c72e3869e9b0490bcab3bcae571946bda65aa5 --- zaqar/notification/notifier.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/zaqar/notification/notifier.py b/zaqar/notification/notifier.py index 4e7c701c0..069c7403d 100644 --- a/zaqar/notification/notifier.py +++ b/zaqar/notification/notifier.py @@ -19,6 +19,8 @@ import futurist from oslo_log import log as logging from six.moves import urllib_parse +from zaqar.storage import pooling + LOG = logging.getLogger(__name__) @@ -34,19 +36,19 @@ class NotifierDriver(object): def post(self, queue_name, messages, client_uuid, project=None): """Send messages to the subscribers.""" - if self.subscription_controller: + if (self.subscription_controller and + not isinstance(self.subscription_controller, + pooling.SubscriptionController)): subscribers = self.subscription_controller.list(queue_name, project) for sub in next(subscribers): s_type = urllib_parse.urlparse(sub['subscriber']).scheme data_driver = self.subscription_controller.driver - conf = (getattr(data_driver, 'conf', None) or - getattr(data_driver, '_conf')) mgr = driver.DriverManager('zaqar.notification.tasks', s_type, invoke_on_load=True) self.executor.submit(mgr.driver.execute, sub, messages, - conf=conf) + conf=data_driver.conf) else: LOG.error('Failed to get subscription controller.')