diff --git a/.travis.yml b/.travis.yml index 6613e551..3be05f05 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ python: - "3.4" # 2.7 and 3.5 are preinstalled by default env: global: - - ETCDVERSION=3.0.15 ZKVERSION=3.4.9 CONSULVERSION=0.7.2 + - ETCDVERSION=3.0.17 ZKVERSION=3.4.9 CONSULVERSION=0.7.4 - PYVERSIONS="2.7 3.4 3.5" matrix: - TEST_SUITE="python setup.py" diff --git a/patroni/postgresql.py b/patroni/postgresql.py index c8366dbe..5781b61c 100644 --- a/patroni/postgresql.py +++ b/patroni/postgresql.py @@ -177,6 +177,8 @@ class Postgresql(object): parameters.pop('synchronous_standby_names', None) else: parameters['synchronous_standby_names'] = self._synchronous_standby_names + if self._major_version >= 9.6 and parameters['wal_level'] == 'hot_standby': + parameters['wal_level'] = 'replica' return {k: v for k, v in parameters.items() if not self._major_version or self._major_version >= self.CMDLINE_OPTIONS.get(k, (0, 1, 9.1))[2]} @@ -249,8 +251,6 @@ class Postgresql(object): elif r[0] in changes: unit = changes['wal_segment_size'] if r[0] in ('min_wal_size', 'max_wal_size') else r[2] new_value = changes.pop(r[0]) - if self._major_version >= 9.6 and r[0] == 'wal_level' and new_value == 'hot_standby': - new_value = 'replica' if new_value is None or not compare_values(r[3], unit, r[1], new_value): if r[4] == 'postmaster': pending_restart = True @@ -435,6 +435,7 @@ class Postgresql(object): if ret: self.write_pg_hba(config.get('pg_hba', [])) self._major_version = self.get_major_version() + self._server_parameters = self.get_server_parameters(self.config) else: self.set_state('initdb failed') return ret @@ -697,9 +698,7 @@ class Postgresql(object): self._write_postgresql_conf() self.resolve_connection_addresses() - opts = {p: self._server_parameters[p] for p, v in self.CMDLINE_OPTIONS.items() if self._major_version >= v[2]} - if self._major_version >= 9.6 and opts['wal_level'] == 'hot_standby': - opts['wal_level'] = 'replica' + opts = {p: self._server_parameters[p] for p in self.CMDLINE_OPTIONS if p in self._server_parameters} options = ['--{0}={1}'.format(p, v) for p, v in opts.items()] start_initiated = time.time() @@ -1209,6 +1208,7 @@ $$""".format(name, ' '.join(options)), name, password, password) ret = self.create_replica(clone_member) == 0 if ret: self._major_version = self.get_major_version() + self._server_parameters = self.get_server_parameters(self.config) self.delete_trigger_file() self.restore_configuration_files() return ret diff --git a/tests/test_postgresql.py b/tests/test_postgresql.py index b044acef..7f83b909 100644 --- a/tests/test_postgresql.py +++ b/tests/test_postgresql.py @@ -41,8 +41,7 @@ class MockCursor(object): ('search_path', 'public', None, 'string', 'user'), ('port', '5433', None, 'integer', 'postmaster'), ('listen_addresses', '*', None, 'string', 'postmaster'), - ('autovacuum', 'on', None, 'bool', 'sighup'), - ('wal_level', 'replica', None, 'enum', 'postmaster')] + ('autovacuum', 'on', None, 'bool', 'sighup')] else: self.results = [(None, None, None, None, None, None, None, None, None, None)] @@ -766,7 +765,7 @@ class TestPostgresql(unittest.TestCase): self.assertEquals(value_in_conf(), None) def test_get_server_parameters(self): - config = {'synchronous_mode': True, 'parameters': {}, 'listen': '0'} + config = {'synchronous_mode': True, 'parameters': {'wal_level': 'hot_standby'}, 'listen': '0'} self.p.get_server_parameters(config) self.p.set_synchronous_standby('foo') self.p.get_server_parameters(config)