From 7633b192136d7694bcc1380b0847fccb62cb283d Mon Sep 17 00:00:00 2001 From: Alexander Kukushkin Date: Fri, 19 May 2017 16:32:35 +0200 Subject: [PATCH] Support change of superuser and replication credentials on reload (#445) Fixes: https://github.com/zalando/patroni/issues/353 and: https://github.com/zalando/patroni/issues/443 --- patroni/postgresql.py | 6 +++++- tests/test_postgresql.py | 10 ++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/patroni/postgresql.py b/patroni/postgresql.py index f740f02a..d0036f4b 100644 --- a/patroni/postgresql.py +++ b/patroni/postgresql.py @@ -99,7 +99,6 @@ class Postgresql(object): self._connect_address = config.get('connect_address') self._superuser = config['authentication'].get('superuser', {}) - self._replication = config['authentication']['replication'] self.resolve_connection_addresses() self._rewind_state = REWIND_STATUS.INITIAL @@ -156,6 +155,10 @@ class Postgresql(object): def use_slots(self): return self._use_slots and self._major_version >= 9.4 + @property + def _replication(self): + return self.config['authentication']['replication'] + @property def callback(self): return self.config.get('callbacks') or {} @@ -235,6 +238,7 @@ class Postgresql(object): return return_codes.get(ret, STATE_UNKNOWN) def reload_config(self, config): + self._superuser = config['authentication'].get('superuser', {}) server_parameters = self.get_server_parameters(config) listen_address_changed = pending_reload = pending_restart = False diff --git a/tests/test_postgresql.py b/tests/test_postgresql.py index 55ed7e4e..f5b2c7b2 100644 --- a/tests/test_postgresql.py +++ b/tests/test_postgresql.py @@ -585,14 +585,16 @@ class TestPostgresql(unittest.TestCase): def test_reload_config(self): parameters = self._PARAMETERS.copy() parameters.pop('f.oo') - self.p.reload_config({'retry_timeout': 10, 'listen': '*', 'parameters': parameters}) + config = {'authentication': {}, 'retry_timeout': 10, 'listen': '*', 'parameters': parameters} + self.p.reload_config(config) parameters['b.ar'] = 'bar' - self.p.reload_config({'retry_timeout': 10, 'listen': '*', 'parameters': parameters}) + self.p.reload_config(config) parameters['autovacuum'] = 'on' - self.p.reload_config({'retry_timeout': 10, 'listen': '*', 'parameters': parameters}) + self.p.reload_config(config) parameters['autovacuum'] = 'off' parameters.pop('search_path') - self.p.reload_config({'retry_timeout': 10, 'listen': '*:5433', 'parameters': parameters}) + config['listen'] = '*:5433' + self.p.reload_config(config) @patch.object(Postgresql, '_version_file_exists', Mock(return_value=True)) def test_get_major_version(self):