diff options
author | zhangjl <zhangjl@awcloud.com> | 2014-12-17 16:04:14 +0800 |
---|---|---|
committer | zhangjl <zhangjl@awcloud.com> | 2015-01-13 18:40:00 +0800 |
commit | 8eed6bbd0953585353a4128112ba98ea99480c0c (patch) | |
tree | 03e97c9c42d22ec2d47734a4461f44bbba0511b5 | |
parent | e55a83e832d888e1a5fb087863590b08e7bd6090 (diff) | |
download | oslo-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.py | 2 | ||||
-rw-r--r-- | tests/drivers/test_matchmaker_redis.py | 5 |
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') |