Add opt-in demotion database safety gate

This commit is contained in:
Lyncoln
2026-09-17 18:53:41 -04:00
parent 6f1f8814f2
commit 8efa03bf1d
4 changed files with 29 additions and 3 deletions
+3 -2
View File
@@ -2,7 +2,7 @@
5aa02fa065d1dba55486838fa4f0cd8eba982edaaf73cdc7d818223a09cbadc6 ocf/loxthelion/managed-container
10932919c4339b553c7c9dbf30b45a917c51c0a08f362e12678003d58b12fa82 ocf/loxthelion/managed-container.d/applications/postgresql/auth.sh
61d64b4a3a15c354f101ef34c5dc0425723f4204207d359b5377d2b9f04f6b23 ocf/loxthelion/managed-container.d/applications/postgresql/demote.sh
98f2940d866fce1ed9a532129cbcc3e2b3aa34787866a326ca64626972593b80 ocf/loxthelion/managed-container.d/applications/postgresql/native_peers.sh
03a8a903514d30e8bb6be04711b608652db0c4bc10bf2cf5c389a78ed044f646 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
@@ -23,7 +23,8 @@ a42bb59a058ffeb59c1baa96e403856910bbbaea98f9104ff93daf4b5970c780 postgres-host/
957a5a72ed277d0216e070abb80733483be3d421b9fa488e27fdd75bb2919548 postgres-host/postgres-ha-peer-config.sh
deb09e3ae40629f43b262ba4f9a7ebf59a1dca3da9d8c94478f670aea28bd0e1 quadlet/postgres.container
04a125068677bbee6e71d313ca9d95d35faa32851b79de781cd7b9f466561445 quadlet/postgres.env.example
cf2c9ea8aa6dada519df2305218907fa93fb5a09f0999bcc62fdd3728c3ce7c5 tests/run-all.sh
38379bdee0e894160855f2e74b222b95a73eb76c394523d6fd1a46e0d57b8d6a tests/run-all.sh
9584b4f3e7187569de4988c7fdd5690cd49bda5913b74227f31985c6bc447009 tests/test-demote-database-gate.sh
22d3eb56e8cd3ae1a58e2616f44abd3818f79d7e5df55c1c158e36dca7c77f42 tests/test-demote-database-shadow.sh
5e5d4fdd2b6c7e0b8b146de7aad06c1f96b221a10fec525b00d40e0d85709fb0 tests/test-entrypoint-structure.sh
2faee72cf2fdcbfa667c3e1c2a7aabc053b96a9b8127ff7440ddb717fd2dc314 tests/test-notify-daemon-shadow.sh
@@ -54,6 +54,11 @@ mc_pg_demote_database_shadow()
if [ "${rc}" -ne 0 ]; then
ocf_log warn \
"managed-containerd demote.database shadow unavailable rc=${rc}"
if [ "${MC_DEMOTE_DATABASE_GATE:-false}" = true ]; then
return 1
fi
return 0
fi
@@ -76,6 +81,10 @@ if (
else
ocf_log err \
"managed-containerd demote.database shadow MISMATCH response=${response}"
if [ "${MC_DEMOTE_DATABASE_GATE:-false}" = true ]; then
return 1
fi
fi
return 0
@@ -153,7 +162,11 @@ mc_pg_native_demote()
return "${OCF_ERR_GENERIC}"
}
mc_pg_demote_database_shadow
if ! mc_pg_demote_database_shadow; then
ocf_exit_reason \
"managed-containerd demote.database gate rejected demotion"
return "${OCF_ERR_GENERIC}"
fi
if [ "$(printf '%s' "${target_node}" | tr '[:upper:]' '[:lower:]')" = \
"$(printf '%s' "${local_node}" | tr '[:upper:]' '[:lower:]')" ]; then
+1
View File
@@ -27,6 +27,7 @@ python3 ./tests/test-proxy-client-parameters.py
./tests/test-notify-daemon-shadow.sh
./tests/test-notify-target-shadow.sh
./tests/test-demote-database-shadow.sh
./tests/test-demote-database-gate.sh
echo
echo ">>> Python syntax"
+11
View File
@@ -0,0 +1,11 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)"
FILE="$ROOT/ocf/loxthelion/managed-container.d/applications/postgresql/native_peers.sh"
grep -q 'MC_DEMOTE_DATABASE_GATE' "$FILE"
grep -q 'gate rejected demotion' "$FILE"
grep -q 'if ! mc_pg_demote_database_shadow' "$FILE"
echo "DEMOTE_DATABASE_GATE_TEST_PASS=1"