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)