From a1bc07db3374dd6336c515091b0c740a756a1bad Mon Sep 17 00:00:00 2001 From: Christopher Winslett Date: Tue, 12 May 2015 16:33:32 -0700 Subject: [PATCH] use TTLs with member listing to keep a current list of cluster members --- governor.py | 2 ++ helpers/etcd.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/governor.py b/governor.py index 57591274..31081f07 100755 --- a/governor.py +++ b/governor.py @@ -68,4 +68,6 @@ while True: if member != postgresql.name: postgresql.query("DO LANGUAGE plpgsql $$DECLARE somevar VARCHAR; BEGIN SELECT slot_name INTO somevar FROM pg_replication_slots WHERE slot_name = '%(slot)s' LIMIT 1; IF NOT FOUND THEN PERFORM pg_create_physical_replication_slot('%(slot)s'); END IF; END$$;" % {"slot": member}) + etcd.touch_member(postgresql.name, postgresql.connection_string) + time.sleep(config["loop_wait"]) diff --git a/helpers/etcd.py b/helpers/etcd.py index 88673c1e..b66e991c 100644 --- a/helpers/etcd.py +++ b/helpers/etcd.py @@ -66,7 +66,7 @@ class Etcd: raise helpers.errors.CurrentLeaderError("Etcd is not responding properly") def touch_member(self, member, connection_string): - self.put_client_path("/members/%s" % member, {"value": connection_string}) + self.put_client_path("/members/%s" % member, {"value": connection_string, "ttl": self.ttl}) def take_leader(self, value): return self.put_client_path("/leader", {"value": value, "ttl": self.ttl}) == None