From 8a844285ff83c5c85c0884dae31f0664dd153022 Mon Sep 17 00:00:00 2001 From: Alexander Kukushkin Date: Wed, 7 Oct 2015 16:48:39 +0200 Subject: [PATCH] Set fetch_cluster flag to False when _inner_load_cluster called Set the same flag to True if the cluster does not yet exists in ZooKeeper --- patroni/zookeeper.py | 3 +++ tests/test_zookeeper.py | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/patroni/zookeeper.py b/patroni/zookeeper.py index c6bfe639..c7b9a44c 100644 --- a/patroni/zookeeper.py +++ b/patroni/zookeeper.py @@ -132,8 +132,11 @@ class ZooKeeper(AbstractDCS): return members def _inner_load_cluster(self): + self.fetch_cluster = False self.event.clear() nodes = set(self.get_children(self.client_path(''), self.cluster_watcher)) + if not nodes: + self.fetch_cluster = True # get initialize flag initialize = self._INITIALIZE in nodes diff --git a/tests/test_zookeeper.py b/tests/test_zookeeper.py index b4e004be..731eb53f 100644 --- a/tests/test_zookeeper.py +++ b/tests/test_zookeeper.py @@ -46,7 +46,7 @@ class MockKazooClient(Mock): def get_children(self, path, watch=None, include_data=False): if not isinstance(path, six.string_types): raise TypeError("Invalid type for 'path' (string expected)") - if path == '/no_node': + if path.startswith('/no_node'): raise NoNodeError elif path in ['/service/bla/', '/service/test/']: return ['initialize', 'leader', 'members', 'optime', 'failover'] @@ -121,6 +121,8 @@ class TestZooKeeper(unittest.TestCase): def test__inner_load_cluster(self): self.zk._base_path = self.zk._base_path.replace('test', 'bla') self.zk._inner_load_cluster() + self.zk._base_path = self.zk._base_path = '/no_node' + self.zk._inner_load_cluster() def test_get_cluster(self): self.assertRaises(ZooKeeperError, self.zk.get_cluster)