diff --git a/patroni/__init__.py b/patroni/__init__.py index 78d8e619..d17d8752 100644 --- a/patroni/__init__.py +++ b/patroni/__init__.py @@ -28,7 +28,7 @@ class Patroni: @property def nofailover(self): - return self.tags.get('nofailover') + return self.tags.get('nofailover', False) @staticmethod def get_dcs(name, config): diff --git a/patroni/api.py b/patroni/api.py index e3cb891b..45ac0034 100644 --- a/patroni/api.py +++ b/patroni/api.py @@ -149,7 +149,7 @@ class RestApiHandler(BaseHTTPRequestHandler): if not members: return b'failover is not possible: cluster does not have members except leader' for member, reachable, in_recovery, xlog_location, tags in self.server.patroni.ha.fetch_nodes_statuses(members): - if reachable and not tags.get('nofailover'): + if reachable and not tags.get('nofailover', False): return None return b'failover is not possible: no good candidates have been found' diff --git a/patroni/dcs.py b/patroni/dcs.py index fff1859f..f640787c 100644 --- a/patroni/dcs.py +++ b/patroni/dcs.py @@ -65,7 +65,7 @@ class Member(namedtuple('Member', 'index,name,session,data')): @property def nofailover(self): - return self.data.get('tags', {}).get('nofailover') + return self.data.get('tags', {}).get('nofailover', False) class Leader(namedtuple('Leader', 'index,session,member')): diff --git a/patroni/ha.py b/patroni/ha.py index e2548e0e..dc5bb14c 100644 --- a/patroni/ha.py +++ b/patroni/ha.py @@ -183,7 +183,7 @@ class Ha: if members: my_xlog_location = self.state_handler.xlog_position() for member, reachable, in_recovery, xlog_location, tags in self.fetch_nodes_statuses(members): - if reachable and not tags.get('nofailover'): # If the node is unreachable it's not healhy + if reachable and not tags.get('nofailover', False): # If the node is unreachable it's not healhy if not in_recovery: logger.warning('Master (%s) is still alive', member.name) return False @@ -196,11 +196,11 @@ class Ha: members = [m for m in members if m.name != self.state_handler.name and not m.nofailover and m.api_url] if members: for member, reachable, in_recovery, xlog_location, tags in self.fetch_nodes_statuses(members): - if reachable and not tags.get('nofailover'): + if reachable and not tags.get('nofailover', False): ret = True # TODO: check xlog_location elif not reachable: logger.info('Member %s is not reachable', member.name) - elif tags.get('nofailover'): + elif tags.get('nofailover', False): logger.info('Member %s is not allowed to promote', member.name) else: logger.warning('manual failover: members list is empty') @@ -216,13 +216,13 @@ class Ha: members = [m for m in self.cluster.members if m.name == failover.member] if members: member, reachable, in_recovery, xlog_location, tags = self.fetch_node_status(members[0]) - if reachable and not tags.get('nofailover'): # node is healthy + if reachable and not tags.get('nofailover', False): # node is healthy logger.info('manual failover: to %s, i am %s', member.name, self.state_handler.name) return False # we wanted to failover to specific member but it is not healthy if not reachable: logger.warning('manual failover: member %s is unhealthy', member.name) - elif tags.get('nofailover'): + elif tags.get('nofailover', False): logger.warning('manual failover: member %s is not allowed to promote', member.name) # at this point we should consider all members as a candidates for failover