mirror of
https://github.com/outbackdingo/patroni.git
synced 2026-08-25 14:53:37 +00:00
Merge pull request #232 from zalando/bugfix/pg_rewind
Start readonly when holding leader lock
This commit is contained in:
@@ -729,14 +729,18 @@ class Postgresql(object):
|
||||
return True
|
||||
|
||||
change_role = self.role == 'master'
|
||||
self._need_rewind = self._need_rewind or change_role and self.can_rewind
|
||||
|
||||
if leader and leader.name == self.name:
|
||||
self._need_rewind = False
|
||||
member = None
|
||||
if self.is_running():
|
||||
return
|
||||
else:
|
||||
self._need_rewind = self._need_rewind or change_role and self.can_rewind
|
||||
|
||||
if self._need_rewind:
|
||||
logger.info("set the rewind flag after demote")
|
||||
|
||||
if leader and leader.name == self.name:
|
||||
return logger.info('Can not rewind from myself')
|
||||
|
||||
if self.is_running():
|
||||
stopped = self.stop()
|
||||
self.set_role('unknown')
|
||||
|
||||
@@ -257,13 +257,13 @@ class TestPostgresql(unittest.TestCase):
|
||||
with patch.object(Postgresql, 'check_recovery_conf', Mock(return_value=True)):
|
||||
self.assertTrue(self.p.follow(None, None)) # nothing to do, recovery.conf has good primary_conninfo
|
||||
|
||||
self.p.follow(self.me, self.me) # follow is called when the node is holding leader lock
|
||||
|
||||
with patch.object(Postgresql, 'restart', Mock(return_value=False)):
|
||||
self.p.set_role('replica')
|
||||
self.p.follow(None, None) # restart without rewind
|
||||
self.p.set_role('master')
|
||||
|
||||
self.p.follow(self.leader, self.me) # Can not rewind from myself
|
||||
|
||||
with patch.object(Postgresql, 'stop', Mock(return_value=False)):
|
||||
self.p.follow(self.leader, self.leader) # failed to stop postgres
|
||||
|
||||
|
||||
Reference in New Issue
Block a user