From 3fdd52e0d48dab3b5cf6623d58a4ac53530b20e8 Mon Sep 17 00:00:00 2001 From: Ihar Hrachyshka <ihrachys@redhat.com> Date: Fri, 24 Jan 2014 17:22:27 +0100 Subject: [PATCH] Qpid: advance thru the list of brokers on reconnect In Qpid implementation, when using multiple qpid_hosts, we don't want to immediately retry failed connection for the same failed broker. This was not the case in existing implementation though, where we've always attempted to reconnect starting from the first broker in the list of candidates. So if the first broker failed, we initiated reconnect to the same failed broker. This change makes reconnect() implementation to select the next broker in the list. This also means that non-failure reconnect attempts will also switch the current broker. All in all, users should not rely on any particular order to use brokers from the list, so this should not constitute an issue. Change-Id: I257c2ad6d7ebead356c0239134340975da6dbc07 Partial-Bug: 1261631 --- oslo/messaging/_drivers/impl_qpid.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/oslo/messaging/_drivers/impl_qpid.py b/oslo/messaging/_drivers/impl_qpid.py index c8366dd93..6c948c666 100644 --- a/oslo/messaging/_drivers/impl_qpid.py +++ b/oslo/messaging/_drivers/impl_qpid.py @@ -466,6 +466,10 @@ class Connection(object): params.update(server_params or {}) self.brokers = params['qpid_hosts'] + + brokers_count = len(self.brokers) + self.next_broker_indices = itertools.cycle(range(brokers_count)) + self.username = params['username'] self.password = params['password'] self.reconnect() @@ -494,7 +498,6 @@ class Connection(object): def reconnect(self): """Handles reconnecting and re-establishing sessions and queues.""" - attempt = 0 delay = 1 while True: # Close the session if necessary @@ -504,8 +507,7 @@ class Connection(object): except qpid_exceptions.ConnectionError: pass - broker = self.brokers[attempt % len(self.brokers)] - attempt += 1 + broker = self.brokers[next(self.next_broker_indices)] try: self.connection_create(broker)