From d965d21ada4b4b6f21896a8bfe4553e1bf2765d7 Mon Sep 17 00:00:00 2001 From: Oleksii Kliukin Date: Fri, 11 Mar 2016 10:48:58 +0100 Subject: [PATCH] Unit-tests for clone from the replica. Remove clonefrom function from dcs, since it's not used. --- patroni/dcs.py | 4 ---- patroni/ha.py | 2 +- tests/test_ha.py | 17 +++++++++++------ 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/patroni/dcs.py b/patroni/dcs.py index b705105d..66e07aae 100644 --- a/patroni/dcs.py +++ b/patroni/dcs.py @@ -72,10 +72,6 @@ class Member(namedtuple('Member', 'index,name,session,data')): def replicatefrom(self): return self.data.get('tags', {}).get('replicatefrom') - @property - def clonefrom(self): - return self.data.get('tags', {}).get('clonefrom') - class Leader(namedtuple('Leader', 'index,session,member')): diff --git a/patroni/ha.py b/patroni/ha.py index f9995d31..f6669e9d 100644 --- a/patroni/ha.py +++ b/patroni/ha.py @@ -80,7 +80,7 @@ class Ha(object): clonefrom = self.patroni.clonefrom clone_member = self.cluster.get_member(clonefrom)\ if self.cluster.has_member(clonefrom) else self.cluster.leader - clone_member_name = 'leader' if clone_member == self.cluster.leader else 'replica {0}'.format(clonefrom) + clone_member_name = 'leader' if clone_member == self.cluster.leader else 'replica \'{0}\''.format(clonefrom) self._async_executor.schedule('bootstrap from {0}'.format(clone_member_name)) self._async_executor.run_async(self.clone, args=(clone_member, clone_member_name)) return 'trying to bootstrap from {0}'.format(clone_member_name) diff --git a/tests/test_ha.py b/tests/test_ha.py index 7eaf3808..2f9e5478 100644 --- a/tests/test_ha.py +++ b/tests/test_ha.py @@ -29,12 +29,12 @@ def get_cluster_not_initialized_without_leader(): def get_cluster_initialized_without_leader(leader=False, failover=None): - m = Member(0, 'leader', 28, {'conn_url': 'postgres://replicator:rep-pass@127.0.0.1:5435/postgres', - 'api_url': 'http://127.0.0.1:8008/patroni', 'xlog_location': 4}) - l = Leader(0, 0, m) if leader else None - o = Member(0, 'other', 28, {'conn_url': 'postgres://replicator:rep-pass@127.0.0.1:5436/postgres', - 'api_url': 'http://127.0.0.1:8011/patroni'}) - return get_cluster(True, l, [m, o], failover) + m1 = Member(0, 'leader', 28, {'conn_url': 'postgres://replicator:rep-pass@127.0.0.1:5435/postgres', + 'api_url': 'http://127.0.0.1:8008/patroni', 'xlog_location': 4}) + l = Leader(0, 0, m1) if leader else None + m2 = Member(0, 'other', 28, {'conn_url': 'postgres://replicator:rep-pass@127.0.0.1:5436/postgres', + 'api_url': 'http://127.0.0.1:8011/patroni'}) + return get_cluster(True, l, [m1, m2], failover) def get_cluster_initialized_with_leader(failover=None): @@ -206,6 +206,11 @@ class TestHa(unittest.TestCase): self.p.bootstrap = false self.assertEquals(self.ha.bootstrap(), 'trying to bootstrap from leader') + def test_bootstrap_from_another_member(self): + self.ha.cluster = get_cluster_initialized_with_leader() + self.ha.patroni.clonefrom = 'other' + self.assertEquals(self.ha.bootstrap(), 'trying to bootstrap from replica \'other\'') + def test_bootstrap_waiting_for_leader(self): self.ha.cluster = get_cluster_initialized_without_leader() self.assertEquals(self.ha.bootstrap(), 'waiting for leader to bootstrap')