From 201f9bf4b29e3bd6cb9c9ccb4a25e62663d04b7a Mon Sep 17 00:00:00 2001 From: Oleksii Kliukin Date: Mon, 27 Jul 2015 11:08:19 +0200 Subject: [PATCH] Make sure role check during callbacks does not accidentially modify the cluster state (is_promoted flag or trigger file). --- helpers/postgresql.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/helpers/postgresql.py b/helpers/postgresql.py index a5ae8b36..71eb7d9c 100644 --- a/helpers/postgresql.py +++ b/helpers/postgresql.py @@ -230,9 +230,9 @@ class Postgresql: return (diff_in_bytes < long(threshold_megabytes) * 1048576) and\ (diff_in_bytes < long(backup_size) * float(threshold_backup_size_percentage) / 100) - def is_leader(self): + def is_leader(self, check_only=False): ret = not self.query('SELECT pg_is_in_recovery()').fetchone()[0] - if ret and self.is_promoted: + if ret and self.is_promoted and not check_only: self.delete_trigger_file() self.is_promoted = False return ret @@ -247,7 +247,7 @@ class Postgresql: cmd = self.callback[cb_name] if is_leader is None: try: - is_leader = self.is_leader() + is_leader = self.is_leader(check_only=True) except psycopg2.OperationalError as e: logger.warning("unable to perform {0} action, cannot obtain the cluster role: {1}".format(cb_name, e)) return False @@ -279,7 +279,7 @@ class Postgresql: def stop(self): try: - is_leader = self.is_leader() + is_leader = self.is_leader(check_only=True) except: is_leader = None pass @@ -296,7 +296,7 @@ class Postgresql: def restart(self): try: - is_leader = self.is_leader() + is_leader = self.is_leader(check_only=True) except: is_leader = None pass