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.
Reviewed: https:/ /review. openstack. org/155673 /git.openstack. org/cgit/ openstack/ oslo.messaging/ commit/ ?id=e8def40a414 9651b69d0ed8fa1 bdbbb431912f27
Committed: https:/
Submitter: Jenkins
Branch: master
commit e8def40a4149651 b69d0ed8fa1bdbb b431912f27
Author: joyce <email address hidden>
Date: Fri Feb 13 16:21:30 2015 +0800
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): expire( topic, CONF.matchmaker _heartbeat_ ttl):
self. register( self.host_ topic[host] , host)
topic = "%s.%s" % (key, host)
if not self.redis.
# If we could not update the expiration, the key
# might have been pruned. Re-register, creating a new
# key in Redis.
self.host_topic is a dict with keys of tuple (key, host), not 'host', info',
register's first parameter is the topic like 'notification-
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: I8d972afe89aec0 2a5c8f0d9dd4e21 6bc12c298a1