Validate demotion successor against peer map

This commit is contained in:
Lyncoln
2026-09-17 17:58:11 -04:00
parent 12a34710df
commit 10df464b00
2 changed files with 68 additions and 1 deletions
+33
View File
@@ -625,6 +625,36 @@ def demote_prepare(config, runtime_state, request_parameters):
"node": node_name,
}
try:
peers = parse_replication_peers(
config.get("PG_REPLICATION_PEERS", "")
)
except (TypeError, ValueError):
return {
"ocf_rc": 1,
"ready": False,
"reason": "peer_map_invalid",
"node": node_name,
"successor_node": successor_node,
}
successor_peer = next(
(
peer for peer in peers
if peer["name"].strip().lower() == successor_node
),
None,
)
if successor_peer is None:
return {
"ocf_rc": 1,
"ready": False,
"reason": "successor_not_configured",
"node": node_name,
"successor_node": successor_node,
}
return {
"ocf_rc": 0,
"ready": False,
@@ -634,8 +664,11 @@ def demote_prepare(config, runtime_state, request_parameters):
"node": node_name,
"target_node": target_node,
"successor_node": successor_node,
"successor_host": successor_peer["host"],
"successor_port": successor_peer["port"],
"age_seconds": age,
"checks": {
"peer_map": True,
"notification": True,
"local_target": True,
"successor_selected": True,