Release the leader key when the leader restarts with an empty data dir (#420)

* If the leader has an empty data directory it must have been recreated, so release the leader key
This commit is contained in:
Alex Kerney
2017-04-18 12:45:48 +02:00
committed by Alexander Kukushkin
parent 1c5d5f1dae
commit 1d513e7e04
2 changed files with 16 additions and 0 deletions
+5
View File
@@ -886,6 +886,11 @@ class Ha(object):
# is data directory empty?
if self.state_handler.data_directory_empty():
# is this instance the leader?
if self.has_lock():
self.release_leader_key_voluntarily()
return 'released leader key voluntarily as data dir empty and currently leader'
return self.bootstrap() # new node
# "bootstrap", but data directory is not empty
elif not self.sysid_valid(self.cluster.initialize) and self.cluster.is_unlocked() and not self.is_paused():
+11
View File
@@ -771,3 +771,14 @@ class TestHa(unittest.TestCase):
def test_wakup(self):
self.ha.wakeup()
def test_leader_with_empty_directory(self):
self.ha.cluster = get_cluster_initialized_with_leader()
self.ha.has_lock = true
self.p.data_directory_empty = true
self.assertEquals(self.ha.run_cycle(), 'released leader key voluntarily as data dir empty and currently leader')
# as has_lock is mocked out, we need to fake the leader key release
self.ha.has_lock = false
# will not say bootstrap from leader as replica can't self elect
self.assertEquals(self.ha.run_cycle(), "trying to bootstrap from replica 'other'")