diff --git a/patroni/postgresql.py b/patroni/postgresql.py index 1da93eec..8b2ab861 100644 --- a/patroni/postgresql.py +++ b/patroni/postgresql.py @@ -730,8 +730,12 @@ class Postgresql(object): change_role = self.role == 'master' - self._need_rewind = (not leader or leader.name != self.name) \ - and (self._need_rewind or change_role and self.can_rewind) + if leader and leader.name == self.name: + self._need_rewind = False + 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") diff --git a/tests/test_postgresql.py b/tests/test_postgresql.py index 81f31105..f744e401 100644 --- a/tests/test_postgresql.py +++ b/tests/test_postgresql.py @@ -257,6 +257,8 @@ 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