mirror of
https://github.com/outbackdingo/patroni.git
synced 2026-08-25 14:53:37 +00:00
remove leader lock after stop of postgres to speed up failover
This commit is contained in:
+7
-5
@@ -214,12 +214,14 @@ class Ha:
|
||||
if not failover.member or failover.member != self.state_handler.name:
|
||||
members = [m for m in self.cluster.members if not failover.member or m.name == failover.member]
|
||||
if self.is_failover_possible(members): # check that there are healthy members
|
||||
self.state_handler.stop()
|
||||
if self.dcs.delete_leader():
|
||||
ret = 'manual failover: demoted self and released leader lock'
|
||||
else:
|
||||
ret = 'manual failover: demoted self but failed to release leader lock'
|
||||
self.state_handler.follow_the_leader(None)
|
||||
self.cluster = None
|
||||
if self.dcs.delete_leader():
|
||||
return 'manual failover: demoted self and released leader lock'
|
||||
else:
|
||||
return 'manual failover: demoted self but failed to release leader lock'
|
||||
return ret
|
||||
else:
|
||||
logger.warning('manual failover: no healthy members found, failover is not possible')
|
||||
else:
|
||||
@@ -360,7 +362,7 @@ class Ha:
|
||||
except DCSError:
|
||||
logger.error('Error communicating with DCS')
|
||||
if self.state_handler.is_running() and self.state_handler.is_leader():
|
||||
self.state_handler.demote(None)
|
||||
self.state_handler.demote()
|
||||
return 'demoted self because DCS is not accessible and i was a leader'
|
||||
except (psycopg2.Error, PostgresConnectionException):
|
||||
logger.exception('Error communicating with Postgresql. Will try again')
|
||||
|
||||
@@ -354,8 +354,8 @@ recovery_target_timeline = 'latest'
|
||||
self.call_nowait(ACTION_ON_ROLE_CHANGE)
|
||||
return ret
|
||||
|
||||
def demote(self, leader):
|
||||
self.follow_the_leader(leader)
|
||||
def demote(self):
|
||||
self.follow_the_leader(None)
|
||||
|
||||
def create_replication_user(self):
|
||||
self.query('CREATE USER "{}" WITH REPLICATION ENCRYPTED PASSWORD %s'.format(
|
||||
|
||||
@@ -137,9 +137,8 @@ class TestPostgresql(unittest.TestCase):
|
||||
self.assertTrue(self.p.sync_from_leader(self.leader))
|
||||
|
||||
def test_follow_the_leader(self):
|
||||
self.p.demote(self.leader)
|
||||
self.p.follow_the_leader(None)
|
||||
self.p.demote(self.leader)
|
||||
self.p.follow_the_leader(self.leader)
|
||||
self.p.demote()
|
||||
self.p.follow_the_leader(self.leader)
|
||||
self.p.follow_the_leader(Leader(-1, None, 28, self.other))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user