Validate demotion successor against peer map
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user