Handle PostgreSQL self-restart demotion preflight
This commit is contained in:
@@ -802,6 +802,47 @@ def demote_prepare(config, runtime_state, request_parameters):
|
||||
"successor_node": successor_node,
|
||||
}
|
||||
|
||||
promoted_nodes = {
|
||||
str(name).strip().lower()
|
||||
for name in str(
|
||||
notification.get("promoted_uname", "")
|
||||
).split()
|
||||
if str(name).strip()
|
||||
}
|
||||
|
||||
if successor_node == node_name:
|
||||
if node_name not in promoted_nodes:
|
||||
return {
|
||||
"ocf_rc": 1,
|
||||
"ready": False,
|
||||
"reason": "self_restart_not_current_primary",
|
||||
"node": node_name,
|
||||
"target_node": target_node,
|
||||
"successor_node": successor_node,
|
||||
}
|
||||
|
||||
return {
|
||||
"ocf_rc": 0,
|
||||
"ready": False,
|
||||
"identity_validated": True,
|
||||
"reason": "local_restart_checks_pending",
|
||||
"mutation": False,
|
||||
"node": node_name,
|
||||
"target_node": target_node,
|
||||
"successor_node": successor_node,
|
||||
"handoff_mode": "local_restart",
|
||||
"final_handoff_required": False,
|
||||
"age_seconds": age,
|
||||
"checks": {
|
||||
"notification": True,
|
||||
"local_target": True,
|
||||
"self_successor": True,
|
||||
"local_currently_promoted": True,
|
||||
"postgresql_mutated": False,
|
||||
"database_checks": False,
|
||||
},
|
||||
}
|
||||
|
||||
if not successor_node:
|
||||
return {
|
||||
"ocf_rc": 1,
|
||||
@@ -885,6 +926,7 @@ def demote_database(config, runtime_state, request_parameters):
|
||||
|
||||
if preparation.get("reason") not in (
|
||||
"database_checks_pending",
|
||||
"local_restart_checks_pending",
|
||||
):
|
||||
return preparation
|
||||
|
||||
@@ -898,6 +940,26 @@ def demote_database(config, runtime_state, request_parameters):
|
||||
"local": local["ha"],
|
||||
}
|
||||
|
||||
if preparation.get("reason") == "local_restart_checks_pending":
|
||||
return {
|
||||
"ocf_rc": 0,
|
||||
"ready": True,
|
||||
"mutation": False,
|
||||
"final_handoff_required": False,
|
||||
"handoff_mode": "local_restart",
|
||||
"reason": "local_restart_demotion_ready",
|
||||
"node": preparation["node"],
|
||||
"target_node": preparation["target_node"],
|
||||
"successor_node": preparation["successor_node"],
|
||||
"checks": {
|
||||
"notification": True,
|
||||
"local_target": True,
|
||||
"local_primary": True,
|
||||
"self_successor": True,
|
||||
"remote_handoff_required": False,
|
||||
},
|
||||
}
|
||||
|
||||
successor_node = preparation["successor_node"]
|
||||
peers = parse_replication_peers(
|
||||
config.get("PG_REPLICATION_PEERS", "")
|
||||
|
||||
Reference in New Issue
Block a user