Skip to content

Commit 3ac2583

Browse files
authored
Don't reload PostgreSQL config while running custom bootstrap (#3563)
Close #3558
1 parent 48eb80f commit 3ac2583

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

patroni/postgresql/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,11 @@ def __init__(self, config: Dict[str, Any], mpp: AbstractMPP) -> None:
9696
self._bin_dir = config.get('bin_dir') or ''
9797
self._role_lock = Lock()
9898
self.set_role(PostgresqlRole.UNINITIALIZED)
99+
self.bootstrap = Bootstrap(self)
100+
self.bootstrapping = False
99101
self.config = ConfigHandler(self, config)
100102
self.config.check_directories()
101103

102-
self.bootstrap = Bootstrap(self)
103-
self.bootstrapping = False
104104
self.__thread_ident = current_thread().ident
105105

106106
self.slots_handler = SlotsHandler(self)

patroni/postgresql/config.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1203,7 +1203,8 @@ def reload_config(self, config: Dict[str, Any], sighup: bool = False) -> None:
12031203

12041204
conf_changed = hba_changed = ident_changed = local_connection_address_changed = False
12051205
param_diff = CaseInsensitiveDict()
1206-
if self._postgresql.state == PostgresqlState.RUNNING:
1206+
if not self._postgresql.bootstrap.running_custom_bootstrap and \
1207+
self._postgresql.state == PostgresqlState.RUNNING:
12071208
changes = CaseInsensitiveDict({p: v for p, v in server_parameters.items()
12081209
if p not in params_skip_changes})
12091210
changes.update({p: None for p in self._server_parameters.keys()
@@ -1276,6 +1277,9 @@ def reload_config(self, config: Dict[str, Any], sighup: bool = False) -> None:
12761277
proxy_addr = config.get('proxy_address')
12771278
self._postgresql.proxy_url = uri('postgres', proxy_addr, self._postgresql.database) if proxy_addr else None
12781279

1280+
if self._postgresql.bootstrap.running_custom_bootstrap:
1281+
return logger.info('Skipping PostgreSQL configuration update while in custom bootstrap.')
1282+
12791283
if conf_changed or sighup:
12801284
self.write_postgresql_conf()
12811285

tests/test_bootstrap.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -245,11 +245,15 @@ def test_post_bootstrap(self):
245245

246246
self.b.bootstrap(config)
247247
self.p.set_state(PostgresqlState.STOPPED)
248-
self.p.reload_config({'authentication': {'superuser': {'username': 'p', 'password': 'p'},
249-
'replication': {'username': 'r', 'password': 'r'},
250-
'rewind': {'username': 'rw', 'password': 'rw'}},
251-
'listen': '*', 'retry_timeout': 10,
252-
'parameters': {'wal_level': '', 'hba_file': 'foo', 'max_prepared_transactions': 10}})
248+
with patch('patroni.postgresql.config.logger.info') as mock_logger:
249+
self.p.reload_config({'authentication': {'superuser': {'username': 'p', 'password': 'p'},
250+
'replication': {'username': 'r', 'password': 'r'},
251+
'rewind': {'username': 'rw', 'password': 'rw'}},
252+
'listen': '*', 'retry_timeout': 10,
253+
'parameters': {'wal_level': '', 'hba_file': 'foo', 'max_prepared_transactions': 10}})
254+
mock_logger.assert_called_once()
255+
self.assertEqual(mock_logger.call_args[0][0],
256+
'Skipping PostgreSQL configuration update while in custom bootstrap.')
253257
with patch.object(Postgresql, 'major_version', PropertyMock(return_value=110000)), \
254258
patch.object(Postgresql, 'restart', Mock()) as mock_restart:
255259
self.b.post_bootstrap({}, task)

0 commit comments

Comments
 (0)