From 8fda95780451029cee6b9dc3fdcf9f71ab4480a6 Mon Sep 17 00:00:00 2001 From: Alexander Kukushkin Date: Tue, 20 Dec 2016 16:41:18 +0100 Subject: [PATCH] Restart former master in readonly only once when partitioned (#370) --- patroni/ha.py | 7 +++++-- tests/test_ha.py | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/patroni/ha.py b/patroni/ha.py index bd136cda..a03c71cb 100644 --- a/patroni/ha.py +++ b/patroni/ha.py @@ -636,8 +636,11 @@ class Ha(object): else: # Either there is no connection to DCS or someone else acquired the lock logger.error('failed to update leader lock') - self.demote('offline') - return 'demoted self because failed to update leader lock in DCS' + if self.state_handler.is_leader(): + self.demote('offline') + return 'demoted self because failed to update leader lock in DCS' + else: + return 'not promoting because failed to update leader lock in DCS' else: logger.info('does not have lock') return self.follow('demoting self because i do not have the lock and i was a leader', diff --git a/tests/test_ha.py b/tests/test_ha.py index 34719931..901f24e2 100644 --- a/tests/test_ha.py +++ b/tests/test_ha.py @@ -243,6 +243,8 @@ class TestHa(unittest.TestCase): self.ha.has_lock = true self.ha.update_lock = false self.assertEquals(self.ha.run_cycle(), 'demoted self because failed to update leader lock in DCS') + self.p.is_leader = false + self.assertEquals(self.ha.run_cycle(), 'not promoting because failed to update leader lock in DCS') def test_follow(self): self.ha.cluster.is_unlocked = false