diff --git a/helpers/etcd.py b/helpers/etcd.py index 48c02d85..8aeb8ea7 100644 --- a/helpers/etcd.py +++ b/helpers/etcd.py @@ -8,7 +8,7 @@ from helpers.utils import sleep logger = logging.getLogger(__name__) -Member = namedtuple('Member', 'hostname,address,ttl') +Member = namedtuple('Member', 'hostname,conn_url,api_url,ttl') class Cluster(namedtuple('Cluster', 'initialize,leader,last_leader_operation,members')): @@ -91,7 +91,7 @@ class Etcd: initialize = True if node else False # get list of members node = self.find_node(response['node'], '/members') or {'nodes': []} - members = [Member(n['key'].split('/')[-1], n['value'], n.get('ttl', None)) for n in node['nodes']] + members = [Member(n['key'].split('/')[-1], n['value'], None, n.get('ttl', None)) for n in node['nodes']] # get last leader operation last_leader_operation = 0 @@ -110,7 +110,7 @@ class Etcd: leader = m break if not leader: - leader = Member(node['value'], None, None) + leader = Member(node['value'], None, None, None) return Cluster(initialize, leader, last_leader_operation, members) elif status_code == 404: diff --git a/helpers/postgresql.py b/helpers/postgresql.py index 7f027b2b..ad987359 100644 --- a/helpers/postgresql.py +++ b/helpers/postgresql.py @@ -115,7 +115,7 @@ class Postgresql: os.path.exists(self.trigger_file) and os.unlink(self.trigger_file) def sync_from_leader(self, leader): - r = parseurl(leader.address) + r = parseurl(leader.conn_url) pgpass = 'pgpass' with open(pgpass, 'w') as f: @@ -185,7 +185,7 @@ class Postgresql: if member.hostname == self.name: continue try: - r = parseurl(member.address) + r = parseurl(member.conn_url) member_conn = psycopg2.connect(**r) member_conn.autocommit = True member_cursor = member_conn.cursor() @@ -219,7 +219,7 @@ class Postgresql: if not os.path.isfile(self.recovery_conf): return False - pattern = leader and leader.address and self.primary_conninfo(leader.address) + pattern = leader and leader.conn_url and self.primary_conninfo(leader.conn_url) with open(self.recovery_conf, 'r') as f: for line in f: @@ -235,11 +235,11 @@ class Postgresql: f.write("""standby_mode = 'on' recovery_target_timeline = 'latest' """) - if leader and leader.address: + if leader and leader.conn_url: f.write(""" primary_slot_name = '{}' primary_conninfo = '{}' -""".format(self.name, self.primary_conninfo(leader.address))) +""".format(self.name, self.primary_conninfo(leader.conn_url))) for name, value in self.config.get('recovery_conf', {}).items(): f.write("{} = '{}'\n".format(name, value)) diff --git a/tests/test_postgresql.py b/tests/test_postgresql.py index 4a4b7416..b7da49aa 100644 --- a/tests/test_postgresql.py +++ b/tests/test_postgresql.py @@ -103,7 +103,7 @@ class TestPostgresql(unittest.TestCase): psycopg2.connect = psycopg2_connect if not os.path.exists(self.p.data_dir): os.makedirs(self.p.data_dir) - self.leader = Member('leader', 'postgres://replicator:rep-pass@127.0.0.1:5434/postgres', 28) + self.leader = Member('leader', 'postgres://replicator:rep-pass@127.0.0.1:5434/postgres', None, 28) def tear_down(self): shutil.rmtree('data') @@ -130,12 +130,12 @@ class TestPostgresql(unittest.TestCase): self.p.follow_the_leader(None) self.p.demote(self.leader) self.p.follow_the_leader(self.leader) - self.p.follow_the_leader(Member('leader', 'postgres://replicator:rep-pass@127.0.0.1:5435/postgres', 28)) + self.p.follow_the_leader(Member('leader', 'postgres://replicator:rep-pass@127.0.0.1:5435/postgres', None, 28)) def test_create_replication_slots(self): self.p.start() - me = Member('test0', 'postgres://replicator:rep-pass@127.0.0.1:5434/postgres', 28) - other = Member('test1', 'postgres://replicator:rep-pass@127.0.0.1:5433/postgres', 28) + me = Member('test0', 'postgres://replicator:rep-pass@127.0.0.1:5434/postgres', None, 28) + other = Member('test1', 'postgres://replicator:rep-pass@127.0.0.1:5433/postgres', None, 28) cluster = Cluster(True, self.leader, 0, [me, other, self.leader]) self.p.create_replication_slots(cluster) @@ -150,9 +150,9 @@ class TestPostgresql(unittest.TestCase): self.assertRaises(psycopg2.OperationalError, self.p.query, 'blabla') def test_is_healthiest_node(self): - leader = Member('leader', 'postgres://replicator:rep-pass@127.0.0.1:5435/postgres', 28) - me = Member('test0', 'postgres://replicator:rep-pass@127.0.0.1:5434/postgres', 28) - other = Member('test1', 'postgres://replicator:rep-pass@127.0.0.1:5433/postgres', 28) + leader = Member('leader', 'postgres://replicator:rep-pass@127.0.0.1:5435/postgres', None, 28) + me = Member('test0', 'postgres://replicator:rep-pass@127.0.0.1:5434/postgres', None, 28) + other = Member('test1', 'postgres://replicator:rep-pass@127.0.0.1:5433/postgres', None, 28) cluster = Cluster(True, leader, 0, [me, other, leader]) self.assertTrue(self.p.is_healthiest_node(cluster)) self.p.is_leader = false