summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhangjl <zhangjl@awcloud.com>2014-12-17 16:04:14 +0800
committerzhangjl <zhangjl@awcloud.com>2015-01-13 18:40:00 +0800
commit8eed6bbd0953585353a4128112ba98ea99480c0c (patch)
tree03e97c9c42d22ec2d47734a4461f44bbba0511b5
parente55a83e832d888e1a5fb087863590b08e7bd6090 (diff)
downloadoslo-messaging-8eed6bbd0953585353a4128112ba98ea99480c0c.tar.gz
Make sure zmq can work with redis
In ZmqDriver's listen method, it calls create_consumer three times. After the first call, the keys related to this topic in redis reads like this: "topic": set(["topic.host"]) "topic.host": "" If the second call, it tries to add the following keys: "topic.host": set(["topic.host.host"]) "topic.host.host": "" But the key "topic.host" already exists as a string type. So the error occurs. To resolve this problem, change the value of keys from string to set. Change-Id: Ic801393d492d2656fcfd8b87f1d2efc6ab3bbd62 Closes-Bug: #1290772
-rw-r--r--oslo_messaging/_drivers/matchmaker_redis.py2
-rw-r--r--tests/drivers/test_matchmaker_redis.py5
2 files changed, 6 insertions, 1 deletions
diff --git a/oslo_messaging/_drivers/matchmaker_redis.py b/oslo_messaging/_drivers/matchmaker_redis.py
index 760561d..93a4076 100644
--- a/oslo_messaging/_drivers/matchmaker_redis.py
+++ b/oslo_messaging/_drivers/matchmaker_redis.py
@@ -127,7 +127,7 @@ class MatchMakerRedis(mm_common.HeartbeatMatchMakerBase):
# No value is needed, we just
# care if it exists. Sets aren't viable
# because only keys can expire.
- pipe.set(key_host, '')
+ pipe.sadd(key_host, '')
pipe.execute()
diff --git a/tests/drivers/test_matchmaker_redis.py b/tests/drivers/test_matchmaker_redis.py
index 95bde9e..a36e14a 100644
--- a/tests/drivers/test_matchmaker_redis.py
+++ b/tests/drivers/test_matchmaker_redis.py
@@ -46,6 +46,7 @@ class RedisMatchMakerTest(test_utils.BaseTestCase):
"network": ["controller1", "node1", "node2", "node3"],
"cert": ["controller1"],
"console": ["controller1"],
+ "l3_agent.node1": ["node1"],
"consoleauth": ["controller1"]}
self.matcher = matchmaker_redis.MatchMakerRedis()
self.populate()
@@ -70,6 +71,10 @@ class RedisMatchMakerTest(test_utils.BaseTestCase):
self.assertEqual(
sorted(self.matcher.redis.smembers('cert')),
['cert.controller1', 'cert.keymaster'])
+ self.matcher.register('l3_agent.node1', 'node1')
+ self.assertEqual(
+ sorted(self.matcher.redis.smembers('l3_agent.node1')),
+ ['l3_agent.node1.node1'])
def test_unregister(self):
self.matcher.unregister('conductor', 'controller1')