Expose demotion database gate as OCF parameter

This commit is contained in:
Lyncoln
2026-09-17 19:10:19 -04:00
parent 23d8ace330
commit 64501a927b
4 changed files with 57 additions and 2 deletions
@@ -13,6 +13,7 @@ OCF_RESKEY_replication_slot_default=""
OCF_RESKEY_application_name_default=""
OCF_RESKEY_rejoin_allow_basebackup_default="false"
OCF_RESKEY_rejoin_basebackup_headroom_percent_default="50"
OCF_RESKEY_demote_database_gate_default="false"
: "${OCF_RESKEY_service_user:=${OCF_RESKEY_service_user_default}}"
: "${OCF_RESKEY_service_name:=${OCF_RESKEY_service_name_default}}"
@@ -27,6 +28,7 @@ OCF_RESKEY_rejoin_basebackup_headroom_percent_default="50"
: "${OCF_RESKEY_application_name:=${OCF_RESKEY_application_name_default}}"
: "${OCF_RESKEY_rejoin_allow_basebackup:=${OCF_RESKEY_rejoin_allow_basebackup_default}}"
: "${OCF_RESKEY_rejoin_basebackup_headroom_percent:=${OCF_RESKEY_rejoin_basebackup_headroom_percent_default}}"
: "${OCF_RESKEY_demote_database_gate:=${OCF_RESKEY_demote_database_gate_default}}"
SERVICE_USER="${OCF_RESKEY_service_user}"
SERVICE_NAME="${OCF_RESKEY_service_name}"
@@ -41,6 +43,8 @@ REPLICATION_SLOT="${OCF_RESKEY_replication_slot}"
APPLICATION_NAME="${OCF_RESKEY_application_name}"
REJOIN_ALLOW_BASEBACKUP="${OCF_RESKEY_rejoin_allow_basebackup}"
REJOIN_BASEBACKUP_HEADROOM_PERCENT="${OCF_RESKEY_rejoin_basebackup_headroom_percent}"
DEMOTE_DATABASE_GATE="${OCF_RESKEY_demote_database_gate}"
export MC_DEMOTE_DATABASE_GATE="${DEMOTE_DATABASE_GATE}"
# Resolve PostgreSQL configuration from the managed service when Pacemaker has
# not explicitly supplied it. The application configuration remains the source
@@ -290,6 +294,15 @@ validate_all()
return "${OCF_ERR_GENERIC}"
fi
case "${DEMOTE_DATABASE_GATE}" in
true|false)
;;
*)
ocf_exit_reason "demote_database_gate must be true or false"
return "${OCF_ERR_CONFIGURED}"
;;
esac
case "${REJOIN_BASEBACKUP_HEADROOM_PERCENT}" in
""|*[!0-9]*)
ocf_exit_reason "rejoin_basebackup_headroom_percent must be a non-negative integer"
@@ -334,6 +347,11 @@ mc_promotion_metadata()
<shortdesc lang="en">Disconnected standby observation lifetime</shortdesc>\
<content type="integer" default="300"/>\
</parameter>\
<parameter name="demote_database_gate" unique="0" required="0">\
<longdesc lang="en">When true, reject native PostgreSQL demotion unless the managed-containerd demote.database checks confirm a reachable, streaming, caught-up successor. When false, the daemon check remains shadow-only and native demotion fails open.</longdesc>\
<shortdesc lang="en">Gate demotion on database checks</shortdesc>\
<content type="boolean" default="false"/>\
</parameter>\
<parameter name="replication_peers" unique="0" required="0">\
<longdesc lang="en">Opt-in stable peer map: node=host:port,node=host:port. Include the local node; exclude the client VIP. IPv4 or DNS hosts only. Requires a configured per-node replication slot, supplied explicitly or resolved from PostgreSQL/the managed container environment, plus peer authentication and slots on every upstream. Uses native primary-only selection; demotion verifies final WAL then ready recovery before successor promotion.</longdesc>\
<shortdesc lang="en">Native replication peer map</shortdesc>\