From 44433c2d42782418fd6112eb1c49eedf4c9de1ae Mon Sep 17 00:00:00 2001 From: Alexander Kukushkin Date: Tue, 21 Jun 2016 09:11:50 +0200 Subject: [PATCH] Setup signal handler before creating dcs Otherwise it was swallowing SysExit exception in an infinite loop. --- patroni/__init__.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/patroni/__init__.py b/patroni/__init__.py index 706df5fa..5781f326 100644 --- a/patroni/__init__.py +++ b/patroni/__init__.py @@ -18,6 +18,8 @@ logger = logging.getLogger(__name__) class Patroni(object): def __init__(self): + self.setup_signal_handlers() + self.version = __version__ self.config = Config() self.dcs = get_dcs(self.config) @@ -31,10 +33,6 @@ class Patroni(object): self.nap_time = self.config['loop_wait'] self.next_run = time.time() - self._reload_config_scheduled = False - self._received_sighup = False - self._received_sigterm = False - def load_dynamic_configuration(self): while True: try: @@ -51,6 +49,10 @@ class Patroni(object): return {tag: value for tag, value in self.config.get('tags', {}).items() if tag not in ('clonefrom', 'nofailover', 'noloadbalance') or value} + @property + def nofailover(self): + return self.tags.get('nofailover', False) + def reload_config(self): try: self.tags = self.get_tags() @@ -62,6 +64,10 @@ class Patroni(object): except Exception: logger.exception('Failed to reload config_file=%s', self.config.config_file) + @property + def replicatefrom(self): + return self.tags.get('replicatefrom') + def sighup_handler(self, *args): self._received_sighup = True @@ -74,14 +80,6 @@ class Patroni(object): def noloadbalance(self): return self.tags.get('noloadbalance', False) - @property - def nofailover(self): - return self.tags.get('nofailover', False) - - @property - def replicatefrom(self): - return self.tags.get('replicatefrom') - def schedule_next_run(self): self.next_run += self.nap_time current_time = time.time() @@ -114,6 +112,8 @@ class Patroni(object): self.schedule_next_run() def setup_signal_handlers(self): + self._received_sighup = False + self._received_sigterm = False signal.signal(signal.SIGHUP, self.sighup_handler) signal.signal(signal.SIGTERM, self.sigterm_handler) signal.signal(signal.SIGCHLD, sigchld_handler) @@ -124,7 +124,6 @@ def main(): logging.getLogger('requests').setLevel(logging.WARNING) patroni = Patroni() - patroni.setup_signal_handlers() try: patroni.run() except KeyboardInterrupt: