RedisDriver _stop() method doesn't release locks
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
tooz |
Fix Released
|
Undecided
|
Stephen Finucane |
Bug Description
The RedisDriver _stop() method doesn't release locks because it pop()s them out of the _acquired_locks set before calling lock.release(), and the RedisLock release() method returns False without releasing the lock if it doesn't find the lock in the coordinator's _acquired_locks set.
def _stop(self):
while self._acquired_
lock = self._acquired_
try:
RedisLock():
def release(self):
with self._exclusive
if not self.acquired:
with _translate_
Since the lock has been popped out of the set, it is never released and eventually times out.
This delays the election of a new leader for the group until the lock times out.
Changed in python-tooz: | |
assignee: | nobody → Bob Haddleton (bob-haddleton) |
status: | New → In Progress |
Changed in python-tooz: | |
assignee: | Bob Haddleton (bob-haddleton) → Stephen Finucane (stephenfinucane) |
Fix proposed to branch: master /review. openstack. org/636038
Review: https:/