From 03dbde52c1382b52ca5f6ef3b45599b2c8992d0d Mon Sep 17 00:00:00 2001 From: Kiall Mac Innes Date: Tue, 23 Jun 2015 12:31:11 +0100 Subject: [PATCH] Ensure unwatch_elected_as_leader correctly clears hooks The default unwatch_elected_as_leader implementation had a typo preventing the method from suceeding. Change-Id: Ib49cbd6558499ff8cd074bf8f2c9a26782a2146c Closes-Bug: 1467907 --- tooz/coordination.py | 4 ++-- tooz/tests/test_coordination.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/tooz/coordination.py b/tooz/coordination.py index 8a7832b1..6bee6b77 100644 --- a/tooz/coordination.py +++ b/tooz/coordination.py @@ -160,8 +160,8 @@ class CoordinationDriver(object): """ self._hooks_elected_leader[group_id].remove(callback) - if not self._hooks.elected_leader[group_id]: - del self._hooks.elected_leader[group_id] + if not self._hooks_elected_leader[group_id]: + del self._hooks_elected_leader[group_id] @staticmethod def stand_down_group_leader(group_id): diff --git a/tooz/tests/test_coordination.py b/tooz/tests/test_coordination.py index c9be3b1a..5d054f90 100644 --- a/tooz/tests/test_coordination.py +++ b/tooz/tests/test_coordination.py @@ -586,6 +586,18 @@ class TestAPI(testscenarios.TestWithScenarios, self.assertEqual(self.group_id, self.event.group_id) + def test_unwatch_elected_as_leader(self): + # Create a group and add a elected_as_leader callback + self._coord.create_group(self.group_id).get() + self._coord.watch_elected_as_leader(self.group_id, self._set_event) + + # Ensure exactly one leader election hook exists + self.assertEqual(1, len(self._coord._hooks_elected_leader)) + + # Unwatch, and ensure no leader election hooks exist + self._coord.unwatch_elected_as_leader(self.group_id, self._set_event) + self.assertEqual(0, len(self._coord._hooks_elected_leader)) + def test_get_lock(self): lock = self._coord.get_lock(self._get_random_uuid()) self.assertTrue(lock.acquire())