mirror of
https://github.com/outbackdingo/patroni.git
synced 2026-08-25 14:53:37 +00:00
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:
committed by
GitHub
parent
1ed91a93c6
commit
3ece35c0a6
+1
-1
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user