Reassemble postgresql parameters when major version became known (#395)

* Reassemble postgresql parameters when major version became known

Otherwise we were writing some "unknown" parameters into postgresql.conf
and postgres was refusing to start. Only 9.3 was affected.

In addition to that move rename of wal_level from hot_standby to replica
into get_server_parameters method. Now this rename is handled in a
single place.

* Bump etcd and consul versions
This commit is contained in:
Alexander Kukushkin
2017-02-16 17:07:21 +01:00
committed by GitHub
parent 1ed91a93c6
commit 3ece35c0a6
3 changed files with 8 additions and 9 deletions
+1 -1
View File
@@ -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"
+5 -5
View File
@@ -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
+2 -3
View File
@@ -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)