Add PostgreSQL promotion database gate

This commit is contained in:
Lyncoln
2026-09-18 02:46:40 -04:00
parent 4229008216
commit 798aa40ae5
7 changed files with 160 additions and 11 deletions
+2
View File
@@ -29,7 +29,9 @@ python3 ./tests/test-proxy-client-parameters.py
./tests/test-demote-database-shadow.sh
./tests/test-promote-database-shadow.sh
./tests/test-demote-database-gate.sh
./tests/test-promote-database-gate.sh
./tests/test-demote-database-parameter.sh
./tests/test-promote-database-parameter.sh
echo
echo ">>> Python syntax"
+81
View File
@@ -0,0 +1,81 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)"
FILE="$ROOT/ocf/loxthelion/managed-container.d/applications/postgresql/promote.sh"
FAKE="$(mktemp)"
cleanup()
{
rm -f "$FAKE"
}
trap cleanup EXIT
ocf_log()
{
:
}
export OCF_RESOURCE_INSTANCE=postgresql-ha
export MC_PROXY_CLIENT="$FAKE"
# Valid disagreement.
cat > "$FAKE" <<'EOF'
import json
print(json.dumps({
"ocf_rc": 1,
"ready": False,
"mutation": False,
}))
EOF
chmod 0755 "$FAKE"
# shellcheck disable=SC1090
. "$FILE"
unset MC_PROMOTE_DATABASE_GATE
mc_pg_promote_database_shadow
export MC_PROMOTE_DATABASE_GATE=true
if mc_pg_promote_database_shadow; then
echo "FAIL: promotion mismatch was not gated"
exit 1
fi
# Transport failure.
cat > "$FAKE" <<'EOF'
raise SystemExit(10)
EOF
chmod 0755 "$FAKE"
unset MC_PROMOTE_DATABASE_GATE
mc_pg_promote_database_shadow
export MC_PROMOTE_DATABASE_GATE=true
if mc_pg_promote_database_shadow; then
echo "FAIL: promotion transport failure was not gated"
exit 1
fi
# Positive daemon agreement must still pass with the gate enabled.
cat > "$FAKE" <<'EOF'
import json
print(json.dumps({
"ocf_rc": 0,
"ready": True,
"mutation": False,
}))
EOF
chmod 0755 "$FAKE"
export MC_PROMOTE_DATABASE_GATE=true
mc_pg_promote_database_shadow
echo "PROMOTE_DATABASE_GATE_RUNTIME_TEST_PASS=1"
+35
View File
@@ -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_promote_database_gate_default="false"' \
"$FILE"
grep -q \
': "${OCF_RESKEY_promote_database_gate:=' \
"$FILE"
grep -q \
'PROMOTE_DATABASE_GATE="${OCF_RESKEY_promote_database_gate}"' \
"$FILE"
grep -q \
'export MC_PROMOTE_DATABASE_GATE="${PROMOTE_DATABASE_GATE}"' \
"$FILE"
grep -q \
'promote_database_gate must be true or false' \
"$FILE"
grep -q \
'<parameter name="promote_database_gate"' \
"$FILE"
grep -q \
'<content type="boolean" default="false"/>' \
"$FILE"
echo "PROMOTE_DATABASE_PARAMETER_TEST_PASS=1"
+2 -2
View File
@@ -12,8 +12,8 @@ grep -q 'comparison=MATCH' "$FILE"
grep -q 'promote.database shadow MISMATCH' "$FILE"
SHADOW_LINE="$(
grep -n '^[[:space:]]*mc_pg_promote_database_shadow$' "$FILE" |
tail -1 |
grep -n 'if ! mc_pg_promote_database_shadow; then' "$FILE" |
head -1 |
cut -d: -f1
)"