Code review, asynchronous restarts.

- Make the restart initiated by the schedule asynchronous
- Fix the placeholders in logs.
- Fix the regexp to detect the PostgreSQL version.
This commit is contained in:
Oleksii Kliukin
2016-07-12 20:25:01 +02:00
parent ec160f0d59
commit 3181c4e59f
4 changed files with 41 additions and 28 deletions
+2 -2
View File
@@ -45,7 +45,7 @@ class MockHa(object):
return (True, '')
@staticmethod
def immediate_restart_scheduled():
def restart_scheduled():
return False
@staticmethod
@@ -120,7 +120,7 @@ class TestRestApiHandler(unittest.TestCase):
MockPatroni.dcs.cluster = None
with patch.object(RestApiHandler, 'get_postgresql_status', Mock(return_value={'role': 'master'})):
MockRestApiServer(RestApiHandler, 'GET /master')
with patch.object(MockHa, 'immediate_restart_scheduled', Mock(return_value=True)):
with patch.object(MockHa, 'restart_scheduled', Mock(return_value=True)):
MockRestApiServer(RestApiHandler, 'GET /master')
self.assertIsNotNone(MockRestApiServer(RestApiHandler, 'GET /master'))
+9 -4
View File
@@ -288,7 +288,7 @@ class TestHa(unittest.TestCase):
def test_restart_in_progress(self):
self.ha._async_executor.schedule('restart', True)
self.assertTrue(self.ha.immediate_restart_scheduled())
self.assertTrue(self.ha.restart_scheduled())
self.assertEquals(self.ha.run_cycle(), 'not healthy enough for leader race')
self.ha.cluster = get_cluster_initialized_with_leader()
@@ -416,15 +416,20 @@ class TestHa(unittest.TestCase):
with patch.object(self.ha,
'future_restart_scheduled', Mock(return_value={'postmaster_start_time': '2016-08-30 12:45TZ+1',
'schedule': '2016-08-31 12:45TZ+1'})):
self.ha.evaluate_scheduled_restart()
self.assertIsNone(self.ha.evaluate_scheduled_restart())
with patch.object(self.ha,
'future_restart_scheduled', Mock(return_value={'postmaster_start_time': '2016-08-31 12:45TZ+1',
'schedule': '2016-08-31 12:45TZ+1'})):
with patch.object(self.ha,
'should_run_scheduled_action', Mock(return_value=True)):
self.ha.evaluate_scheduled_restart()
self.assertIsNotNone(self.ha.evaluate_scheduled_restart())
with patch.object(self.ha, 'restart', Mock(return_value=(False, "Test"))):
self.ha.evaluate_scheduled_restart()
self.assertIsNone(self.ha.evaluate_scheduled_restart())
def test_scheduled_restart(self):
self.ha.cluster = get_cluster_initialized_with_leader()
with patch.object(self.ha, "evaluate_scheduled_restart", Mock(return_value="restart scheduled")):
self.assertEquals(self.ha.run_cycle(), "restart scheduled")
def test_restart_matches(self):
self.p._role = 'replica'