summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Wilson <geekinutah@gmail.com>2013-07-15 12:57:38 -0600
committerMichael Wilson <geekinutah@gmail.com>2013-07-20 15:27:41 -0600
commit34a684200e2f34be2f7c0b86da48c0c46691fe46 (patch)
treeed2cfcd92ae93e07e0a4b06677c8ef0cd064233b
parent6dd15766c82079db345a45cc20a9410c968cd599 (diff)
downloadoslo-34a684200e2f34be2f7c0b86da48c0c46691fe46.tar.gz
oslo-34a684200e2f34be2f7c0b86da48c0c46691fe46.tar.xz
oslo-34a684200e2f34be2f7c0b86da48c0c46691fe46.zip
On reconnecting a FanoutConsumer, don't grow the topic name
Commit 719eba4cae7f2bc11753b17c65c7597b8d6ed72d in oslo-incubator introduced a small bug on reconnect. Because of the way the topic was extracted, an extra '_fanout' gets tacked onto the topic name with each reconnect. A one line fix in code (rpartition) and test case are needed. Change-Id: I7b3ca48502c9d5a99802c24dfcec0a1a8292fa07 Fixes: bug #1201552
-rw-r--r--openstack/common/rpc/impl_qpid.py2
-rw-r--r--tests/unit/rpc/test_qpid.py42
2 files changed, 43 insertions, 1 deletions
diff --git a/openstack/common/rpc/impl_qpid.py b/openstack/common/rpc/impl_qpid.py
index 7fd835a..99c4619 100644
--- a/openstack/common/rpc/impl_qpid.py
+++ b/openstack/common/rpc/impl_qpid.py
@@ -238,7 +238,7 @@ class FanoutConsumer(ConsumerBase):
{"exclusive": True})
def reconnect(self, session):
- topic = self.get_node_name()
+ topic = self.get_node_name().rpartition('_fanout')[0]
params = {
'session': session,
'topic': topic,
diff --git a/tests/unit/rpc/test_qpid.py b/tests/unit/rpc/test_qpid.py
index 9ef0dcd..a4bce1c 100644
--- a/tests/unit/rpc/test_qpid.py
+++ b/tests/unit/rpc/test_qpid.py
@@ -649,6 +649,48 @@ class RpcQpidTestCase(utils.BaseTestCase):
lambda *_x, **_y: None)
connection.close()
+ def test_fanout_reconnect(self):
+ expected_address = mox.Regex(
+ r'^impl_qpid_test_fanout ; '
+ '{"node": {"x-declare": {"auto-delete": true, "durable": '
+ 'false, "type": "fanout"}, "type": "topic"}, "create": '
+ '"always", "link": {"x-declare": {"auto-delete": true, '
+ '"exclusive": true, "durable": false}, "durable": true, '
+ '"name": "impl_qpid_test_fanout_.*"}}$')
+ self.mock_connection = self.mox.CreateMock(self.orig_connection)
+ self.mock_session = self.mox.CreateMock(self.orig_session)
+ self.mock_receiver = self.mox.CreateMock(self.orig_receiver)
+
+ # First connection and create_consumer
+ self.mock_connection.opened().AndReturn(False)
+ self.mock_connection.open()
+ self.mock_connection.session().AndReturn(self.mock_session)
+ self.mock_session.receiver(expected_address).AndReturn(
+ self.mock_receiver)
+ self.mock_receiver.capacity = 1
+
+ # Now call reconnect
+ self.mock_connection.opened().AndReturn(False)
+ self.mock_connection.open()
+ self.mock_connection.session().AndReturn(self.mock_session)
+ # FIXME(wilsonmh): connect is currently part of __init__(),
+ # causing a reconnect to declare two receivers :(
+ self.mock_session.receiver(expected_address).AndReturn(
+ self.mock_receiver)
+ self.mock_session.receiver(expected_address).AndReturn(
+ self.mock_receiver)
+ self.mock_receiver.capacity = 1
+ self.mock_connection.close()
+
+ self.mox.ReplayAll()
+
+ connection = impl_qpid.create_connection(FLAGS)
+ connection.create_consumer("impl_qpid_test",
+ None,
+ True)
+ connection.reconnect()
+ connection.close()
+
#
#from nova.tests.rpc import common