diff --git a/patroni/api.py b/patroni/api.py index 505852a9..07db06ae 100644 --- a/patroni/api.py +++ b/patroni/api.py @@ -768,6 +768,8 @@ class RestApiServer(ThreadingMixIn, HTTPServer, Thread): reloading_config = self.__listen is not None # changing config in runtime if reloading_config: self.shutdown() + # Rely on ThreadingMixIn.server_close() to have all requests terminate before we continue + self.server_close() self.__listen = listen self.__ssl_options = ssl_options diff --git a/tests/test_api.py b/tests/test_api.py index 2d901a1f..e83edfef 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -549,7 +549,8 @@ class TestRestApiServer(unittest.TestCase): self.assertRaises(ValueError, MockRestApiServer, None, '', bad_config) self.assertRaises(ValueError, self.srv.reload_config, bad_config) self.assertRaises(ValueError, self.srv.reload_config, {}) - with patch.object(socket.socket, 'setsockopt', Mock(side_effect=socket.error)): + with patch.object(socket.socket, 'setsockopt', Mock(side_effect=socket.error)), \ + patch.object(MockRestApiServer, 'server_close', Mock()): self.srv.reload_config({'listen': ':8008'}) @patch.object(MockPatroni, 'dcs')