From a6603e8b48647f28a57a45b38c904bb87f75ef47 Mon Sep 17 00:00:00 2001 From: Alexander Kukushkin Date: Thu, 8 Oct 2015 13:07:38 +0200 Subject: [PATCH] bugfix in zookeeper module: when master node was being attached to patroni/zookeeper (no cluster in zookeeper yet) patroni has never tried to "refetch" cluster from DCS. It was leeding to demote... --- patroni/zookeeper.py | 7 ++++--- tests/test_zookeeper.py | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/patroni/zookeeper.py b/patroni/zookeeper.py index c7b9a44c..6f8ab981 100644 --- a/patroni/zookeeper.py +++ b/patroni/zookeeper.py @@ -165,8 +165,8 @@ class ZooKeeper(AbstractDCS): failover = Failover.from_node(failover[1].version, failover[0]) # get last leader operation - self.last_leader_operation = self.get_node(self.leader_optime_path) if self.fetch_cluster else None - self.last_leader_operation = 0 if self.last_leader_operation is None else int(self.last_leader_operation[0]) + optime = self.get_node(self.leader_optime_path) if self._OPTIME in nodes and self.fetch_cluster else None + self.last_leader_operation = 0 if optime is None else int(optime[0]) self._cluster = Cluster(initialize, leader, self.last_leader_operation, members, failover) def _load_cluster(self): @@ -280,5 +280,6 @@ class ZooKeeper(AbstractDCS): logger.exception("Unable to delete initialize key") def watch(self, timeout): - self.fetch_cluster = super(ZooKeeper, self).watch(timeout) + if super(ZooKeeper, self).watch(timeout): + self.fetch_cluster = True return self.fetch_cluster diff --git a/tests/test_zookeeper.py b/tests/test_zookeeper.py index 731eb53f..84807270 100644 --- a/tests/test_zookeeper.py +++ b/tests/test_zookeeper.py @@ -172,5 +172,5 @@ class TestZooKeeper(unittest.TestCase): def test_watch(self): self.zk.watch(0) - self.zk.event.isSet = lambda: False + self.zk.event.isSet = lambda: True self.zk.watch(0)