diff --git a/patroni/postgresql/rewind.py b/patroni/postgresql/rewind.py index b30d739f..ba6e4532 100644 --- a/patroni/postgresql/rewind.py +++ b/patroni/postgresql/rewind.py @@ -218,6 +218,7 @@ class Rewind(object): need_rewind = True else: need_rewind = switchpoint != self._get_checkpoint_end(local_timeline, local_lsn) + break elif parent_timeline > local_timeline: need_rewind = True break diff --git a/tests/test_rewind.py b/tests/test_rewind.py index 19e7e6ad..54fdae91 100644 --- a/tests/test_rewind.py +++ b/tests/test_rewind.py @@ -141,7 +141,10 @@ class TestRewind(BaseTestPostgresql): self.leader = self.leader.member self.assertFalse(self.r.rewind_or_reinitialize_needed_and_possible(self.leader)) mock_check_leader_is_not_in_recovery.return_value = True - self.assertTrue(self.r.rewind_or_reinitialize_needed_and_possible(self.leader)) + self.assertFalse(self.r.rewind_or_reinitialize_needed_and_possible(self.leader)) + self.r.trigger_check_diverged_lsn() + with patch.object(MockCursor, 'fetchone', Mock(side_effect=[('', 3, '0/0'), ('', b'4\t0/40159C0\tn\n')])): + self.assertTrue(self.r.rewind_or_reinitialize_needed_and_possible(self.leader)) self.r.reset_state() self.r.trigger_check_diverged_lsn() with patch('patroni.psycopg.connect', Mock(side_effect=Exception)):