From 96a889f358d82d070690465eae1838322d191e2d Mon Sep 17 00:00:00 2001 From: Christopher Winslett Date: Wed, 13 May 2015 16:56:25 -0700 Subject: [PATCH] fix logic for dead leaders returning online without checking that recovery.conf exists, the prior logic would not create the recovyer.conf, and a dead leader would return to a primary state --- helpers/postgresql.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/helpers/postgresql.py b/helpers/postgresql.py index f6bbcd69..fd93f954 100644 --- a/helpers/postgresql.py +++ b/helpers/postgresql.py @@ -92,7 +92,8 @@ class Postgresql: logger.info("Removed %s" % pid_path) command_code = os.system("postgres -D %s %s &" % (self.data_dir, self.server_options())) - time.sleep(5) + while not self.is_running(): + time.sleep(5) return command_code != 0 def stop(self): @@ -183,8 +184,7 @@ primary_conninfo = 'user=%(user)s password=%(password)s host=%(hostname)s port=% return True def follow_no_leader(self): - print "initing leaderless follower" - if os.system("grep primary_conninfo %(data_dir)s/recovery.conf > /dev/null" % {"data_dir": self.data_dir}) == 0: + if not os.path.exists("%s/recovery.conf" % self.data_dir) or os.system("grep primary_conninfo %(data_dir)s/recovery.conf &> /dev/null" % {"data_dir": self.data_dir}) == 0: self.write_recovery_conf(None) if self.is_running(): self.restart()