Fix matchmaker_redis ack_alive fails with KeyError
Fix matchmaker_redis: ack_alive fails with KeyError on re-registration attempt. def ack_alive(self, key, host): topic = "%s.%s" % (key, host) if not self.redis.expire(topic, CONF.matchmaker_heartbeat_ttl): # If we could not update the expiration, the key # might have been pruned. Re-register, creating a new # key in Redis. self.register(self.host_topic[host], host) self.host_topic is a dict with keys of tuple (key, host), not 'host', register's first parameter is the topic like 'notification-info', so modify it to key. And it will not cause indefinite recursion, because when register end, the key exist in redis, redis.expire will return True. Add test case for ack_alive. Closes-Bug: #1419718 Change-Id: I8d972afe89aec02a5c8f0d9dd4e216bc12c298a1
This commit is contained in:
parent
68cd8cfecc
commit
e8def40a41
|
@ -105,7 +105,7 @@ class MatchMakerRedis(mm_common.HeartbeatMatchMakerBase):
|
||||||
# If we could not update the expiration, the key
|
# If we could not update the expiration, the key
|
||||||
# might have been pruned. Re-register, creating a new
|
# might have been pruned. Re-register, creating a new
|
||||||
# key in Redis.
|
# key in Redis.
|
||||||
self.register(self.host_topic[host], host)
|
self.register(key, host)
|
||||||
|
|
||||||
def is_alive(self, topic, host):
|
def is_alive(self, topic, host):
|
||||||
if self.redis.ttl(host) == -1:
|
if self.redis.ttl(host) == -1:
|
||||||
|
|
|
@ -81,3 +81,9 @@ class RedisMatchMakerTest(test_utils.BaseTestCase):
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
sorted(self.matcher.redis.smembers('conductor')),
|
sorted(self.matcher.redis.smembers('conductor')),
|
||||||
['conductor.node1', 'conductor.node2', 'conductor.node3'])
|
['conductor.node1', 'conductor.node2', 'conductor.node3'])
|
||||||
|
|
||||||
|
def test_ack_alive(self):
|
||||||
|
self.matcher.ack_alive('ack_alive', 'controller1')
|
||||||
|
self.assertEqual(
|
||||||
|
sorted(self.matcher.redis.smembers('ack_alive')),
|
||||||
|
['ack_alive.controller1'])
|
||||||
|
|
Loading…
Reference in New Issue