Merge pull request #232 from zalando/bugfix/pg_rewind

Start readonly when holding leader lock
This commit is contained in:
Alexander Kukushkin
2016-07-04 13:11:35 +02:00
committed by GitHub
2 changed files with 10 additions and 6 deletions
+8 -4
View File
@@ -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')
+2 -2
View File
@@ -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