From 2044d4db96eb5dea240ca547ac27dbc0a513bb19 Mon Sep 17 00:00:00 2001 From: Oleksii Kliukin Date: Mon, 26 Oct 2015 14:52:34 +0100 Subject: [PATCH] Move nofailover checks on the upper level. Instead of checking that nofailover node should not be marked as healthiest in one of the _failover functions, do make it unhealthy in the is_healthiest_node. --- patroni/ha.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/patroni/ha.py b/patroni/ha.py index 3033ffc7..faa9eeec 100644 --- a/patroni/ha.py +++ b/patroni/ha.py @@ -232,7 +232,7 @@ class Ha: if failover.leader: if self.state_handler.name == failover.leader: # I was the leader # exclude me and desired member which is unhealthy (failover.member can be None) - members = [m for m in self.cluster.members if m.name != failover.member] + members = [m for m in self.cluster.members if m.name not in (failover.member, failover.leader)] if self.is_failover_possible(members): # check that there are healthy members return False else: # I was the leader and it looks like currently I am the only healthy member @@ -245,6 +245,13 @@ class Ha: return self._is_healthiest_node(members, check_replication_lag=False) def is_healthiest_node(self): + + if self.state_handler.is_leader(): # leader is always the healthiest + return True + + if self.patroni.nofailover: # nofailover tag makes node always unhealthy + return False + if self.cluster.failover: return self.manual_failover_process_no_leader()