use TTLs with member listing to keep a current list of cluster members

This commit is contained in:
Christopher Winslett
2015-05-12 16:33:32 -07:00
parent 36c4c31e83
commit a1bc07db33
2 changed files with 3 additions and 1 deletions
+2
View File
@@ -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"])
+1 -1
View File
@@ -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