Add PostgreSQL promotion database gate
This commit is contained in:
@@ -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"
|
||||
|
||||
Executable
+81
@@ -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"
|
||||
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_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"
|
||||
@@ -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
|
||||
)"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user