Expose demotion database gate as OCF parameter
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
e111dfe454a6e1edd80edc0c303119e045e7c88fe77b69a2745e58a022d0d317 ocf/loxthelion/managed-container.d/applications/postgresql/native_peers.sh
|
||||
bcfde96b98f4727a8c97d42a39b7c6ec925b1b89d17ef67cc58eb7bd67afbfae ocf/loxthelion/managed-container.d/applications/postgresql/notify.sh
|
||||
957a5a72ed277d0216e070abb80733483be3d421b9fa488e27fdd75bb2919548 ocf/loxthelion/managed-container.d/applications/postgresql/peer_config.sh
|
||||
5091bc554915d1450fe939f94c0b0a370fecdb2ae5db9c4f0f55c340c0145519 ocf/loxthelion/managed-container.d/applications/postgresql/plugin.sh
|
||||
99bb3478931eced9471a8f054c14d152780aec73801449d1a6b2f09a4b656bec ocf/loxthelion/managed-container.d/applications/postgresql/plugin.sh
|
||||
c1d878dabf22ad3928d66a5542bda3c150e5e9b039926629e7c5fd3401d29be4 ocf/loxthelion/managed-container.d/applications/postgresql/postgres.sh
|
||||
f482853a0c7992981e59b4ad78d1ee69851d5d60fdec1f695673228017dd8244 ocf/loxthelion/managed-container.d/applications/postgresql/promote.sh
|
||||
5166fc3370f49ab14cd975ded4b03a74b9bd7dbff5762b41a15552c42f934ea7 ocf/loxthelion/managed-container.d/applications/postgresql/promotion_state.py
|
||||
@@ -23,8 +23,9 @@ a42bb59a058ffeb59c1baa96e403856910bbbaea98f9104ff93daf4b5970c780 postgres-host/
|
||||
957a5a72ed277d0216e070abb80733483be3d421b9fa488e27fdd75bb2919548 postgres-host/postgres-ha-peer-config.sh
|
||||
deb09e3ae40629f43b262ba4f9a7ebf59a1dca3da9d8c94478f670aea28bd0e1 quadlet/postgres.container
|
||||
04a125068677bbee6e71d313ca9d95d35faa32851b79de781cd7b9f466561445 quadlet/postgres.env.example
|
||||
38379bdee0e894160855f2e74b222b95a73eb76c394523d6fd1a46e0d57b8d6a tests/run-all.sh
|
||||
a4bedb1c423294e4cafe4c93e9daff3d2b774a8f8e4a6b989322acbc2b842a04 tests/run-all.sh
|
||||
a373c0560391a2d8f63c3ba31609ab16b219d9b532b4ab9f8aea6dc45de10555 tests/test-demote-database-gate.sh
|
||||
688eeb756c7f346e7e55acc555004ba12b48bc7c3d309073658d5e84a6e5e348 tests/test-demote-database-parameter.sh
|
||||
22d3eb56e8cd3ae1a58e2616f44abd3818f79d7e5df55c1c158e36dca7c77f42 tests/test-demote-database-shadow.sh
|
||||
5e5d4fdd2b6c7e0b8b146de7aad06c1f96b221a10fec525b00d40e0d85709fb0 tests/test-entrypoint-structure.sh
|
||||
2faee72cf2fdcbfa667c3e1c2a7aabc053b96a9b8127ff7440ddb717fd2dc314 tests/test-notify-daemon-shadow.sh
|
||||
|
||||
@@ -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>\
|
||||
|
||||
@@ -28,6 +28,7 @@ python3 ./tests/test-proxy-client-parameters.py
|
||||
./tests/test-notify-target-shadow.sh
|
||||
./tests/test-demote-database-shadow.sh
|
||||
./tests/test-demote-database-gate.sh
|
||||
./tests/test-demote-database-parameter.sh
|
||||
|
||||
echo
|
||||
echo ">>> Python syntax"
|
||||
|
||||
Executable
+35
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)"
|
||||
FILE="$ROOT/ocf/loxthelion/managed-container.d/applications/postgresql/plugin.sh"
|
||||
|
||||
grep -q \
|
||||
'OCF_RESKEY_demote_database_gate_default="false"' \
|
||||
"$FILE"
|
||||
|
||||
grep -q \
|
||||
': "${OCF_RESKEY_demote_database_gate:=' \
|
||||
"$FILE"
|
||||
|
||||
grep -q \
|
||||
'DEMOTE_DATABASE_GATE="${OCF_RESKEY_demote_database_gate}"' \
|
||||
"$FILE"
|
||||
|
||||
grep -q \
|
||||
'export MC_DEMOTE_DATABASE_GATE="${DEMOTE_DATABASE_GATE}"' \
|
||||
"$FILE"
|
||||
|
||||
grep -q \
|
||||
'demote_database_gate must be true or false' \
|
||||
"$FILE"
|
||||
|
||||
grep -q \
|
||||
'<parameter name="demote_database_gate"' \
|
||||
"$FILE"
|
||||
|
||||
grep -q \
|
||||
'<content type="boolean" default="false"/>' \
|
||||
"$FILE"
|
||||
|
||||
echo "DEMOTE_DATABASE_PARAMETER_TEST_PASS=1"
|
||||
Reference in New Issue
Block a user