diff --git a/patroni/ha.py b/patroni/ha.py index 3e45f5d4..92259b2a 100644 --- a/patroni/ha.py +++ b/patroni/ha.py @@ -771,6 +771,8 @@ class Ha(object): # Either there is no connection to DCS or someone else acquired the lock logger.error('failed to update leader lock') if self.state_handler.is_leader(): + if self.is_paused(): + return 'continue to run as master after failing to update leader lock in DCS' self.demote('immediate-nolock') return 'demoted self because failed to update leader lock in DCS' else: diff --git a/tests/test_ha.py b/tests/test_ha.py index bdd2ff9f..70b4f60f 100644 --- a/tests/test_ha.py +++ b/tests/test_ha.py @@ -623,6 +623,14 @@ class TestHa(unittest.TestCase): self.ha.cluster = get_cluster_initialized_with_leader(Failover(0, '', self.p.name, None)) self.assertEquals(self.ha.run_cycle(), 'PAUSE: waiting to become master after promote...') + def test_failed_to_update_lock_in_pause(self): + self.ha.update_lock = false + self.ha.is_paused = true + self.p.name = 'leader' + self.ha.cluster = get_cluster_initialized_with_leader() + self.assertEquals(self.ha.run_cycle(), + 'PAUSE: continue to run as master after failing to update leader lock in DCS') + def test_postgres_unhealthy_in_pause(self): self.ha.is_paused = true self.p.is_healthy = false