Propagate new fallback model to all remaining script references
All FALLBACK_${MY_ID}_COVERS_${REMOTE_ID}_TIER* references updated to
FALLBACK_${REMOTE_ID}_TIER* across fallback_test.sh, partnership_manager.sh,
docker_update.sh, mesh_monitor.sh, and monitor.php. mesh_monitor.sh drops
the inner covering-host loop — tier data now lives in the covered host's own
conf so no cross-host scan is needed. monitor.php reads from the covered
host's conf file rather than the local host's.
This commit is contained in:
@@ -219,7 +219,7 @@ if [[ "$REMAINDER_MODE" == true ]]; then
|
|||||||
# Updating them here risks version divergence: if remote's writeback after handback
|
# Updating them here risks version divergence: if remote's writeback after handback
|
||||||
# encounters data written by a newer version, it may not handle it correctly.
|
# encounters data written by a newer version, it may not handle it correctly.
|
||||||
for _tier in 1 2 3 4; do
|
for _tier in 1 2 3 4; do
|
||||||
_tier_var="FALLBACK_${MY_ID}_COVERS_${REMOTE_ID}_TIER${_tier}"
|
_tier_var="FALLBACK_${REMOTE_ID}_TIER${_tier}"
|
||||||
eval "_tier_arr=(\"\${${_tier_var}[@]:-}\")" 2>/dev/null
|
eval "_tier_arr=(\"\${${_tier_var}[@]:-}\")" 2>/dev/null
|
||||||
for _c in "${_tier_arr[@]}"; do
|
for _c in "${_tier_arr[@]}"; do
|
||||||
[[ -n "$_c" ]] && _exclude["$_c"]=1
|
[[ -n "$_c" ]] && _exclude["$_c"]=1
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ if [[ "$SHOW_STATUS" == true ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Show Tier 1 containers for this host
|
# Show Tier 1 containers for this host
|
||||||
TIER1_VAR="FALLBACK_${MY_ID}_COVERS_${REMOTE_ID}_TIER1"
|
TIER1_VAR="FALLBACK_${REMOTE_ID}_TIER1"
|
||||||
eval "TIER1_CONTAINERS=(\"\${${TIER1_VAR}[@]:-}\")"
|
eval "TIER1_CONTAINERS=(\"\${${TIER1_VAR}[@]:-}\")"
|
||||||
echo "$ICON_CONTAINERS Tier 1 to test: ${TIER1_CONTAINERS[*]:-none configured}"
|
echo "$ICON_CONTAINERS Tier 1 to test: ${TIER1_CONTAINERS[*]:-none configured}"
|
||||||
echo "━━━━━━━━━━━━━━━━━━━━━━━"
|
echo "━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
@@ -223,8 +223,8 @@ TOTAL_START=$(date +%s)
|
|||||||
phase_pass() { PHASES_PASS+=("$1"); warn "$ICON_DONE Phase: $1 — PASSED ✅"; }
|
phase_pass() { PHASES_PASS+=("$1"); warn "$ICON_DONE Phase: $1 — PASSED ✅"; }
|
||||||
phase_fail() { PHASES_FAIL+=("$1"); error "Phase: $1 — FAILED ❌"; }
|
phase_fail() { PHASES_FAIL+=("$1"); error "Phase: $1 — FAILED ❌"; }
|
||||||
|
|
||||||
# Get Tier 1 containers for this server's fallback responsibility
|
# Get Tier 1 containers defined in remote's own conf
|
||||||
TIER1_VAR="FALLBACK_${MY_ID}_COVERS_${REMOTE_ID}_TIER1"
|
TIER1_VAR="FALLBACK_${REMOTE_ID}_TIER1"
|
||||||
eval "TIER1_CONTAINERS=(\"\${${TIER1_VAR}[@]:-}\")"
|
eval "TIER1_CONTAINERS=(\"\${${TIER1_VAR}[@]:-}\")"
|
||||||
|
|
||||||
# ==============================================================================================
|
# ==============================================================================================
|
||||||
@@ -286,7 +286,7 @@ fi
|
|||||||
# Tier 1 containers configured
|
# Tier 1 containers configured
|
||||||
if [[ ${#TIER1_CONTAINERS[@]} -eq 0 ]]; then
|
if [[ ${#TIER1_CONTAINERS[@]} -eq 0 ]]; then
|
||||||
error "No Tier 1 containers configured for $MY_ID → $REMOTE_ID"
|
error "No Tier 1 containers configured for $MY_ID → $REMOTE_ID"
|
||||||
error "Check FALLBACK_${MY_ID}_COVERS_${REMOTE_ID}_TIER1 in host*.conf"
|
error "Check FALLBACK_${REMOTE_ID}_TIER1 in ${REMOTE_ID,,}.conf"
|
||||||
phase_fail "Pre-flight"
|
phase_fail "Pre-flight"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
+15
-16
@@ -142,30 +142,29 @@ for covered in "${ALL_HOST_IDS[@]}"; do
|
|||||||
covered_owner_var="${covered}_OWNER"; covered_owner="${!covered_owner_var:-$covered}"
|
covered_owner_var="${covered}_OWNER"; covered_owner="${!covered_owner_var:-$covered}"
|
||||||
covered_email_var="${covered}_OWNER_EMAIL"; covered_email="${!covered_email_var:-}"
|
covered_email_var="${covered}_OWNER_EMAIL"; covered_email="${!covered_email_var:-}"
|
||||||
|
|
||||||
# Find who covers this host and collect their tiers
|
# Each host defines its own recovery profile — read directly from covered host's vars
|
||||||
any_tiers=false
|
any_tiers=false
|
||||||
declare -A tier_containers=()
|
declare -A tier_containers=()
|
||||||
declare -A tier_delays=()
|
declare -A tier_delays=()
|
||||||
covered_by=""
|
covered_by=""
|
||||||
|
|
||||||
for covering in "${ALL_HOST_IDS[@]}"; do
|
for tier in 1 2 3 4; do
|
||||||
[[ "$covering" == "$covered" ]] && continue
|
containers=$(get_array "FALLBACK_${covered}_TIER${tier}")
|
||||||
|
[[ -z "$containers" ]] && continue
|
||||||
|
any_tiers=true
|
||||||
|
tier_containers[$tier]="$containers"
|
||||||
|
delay_var="${covered}_TIER${tier}_DELAY"
|
||||||
|
tier_delays[$tier]="${!delay_var:-0}"
|
||||||
|
done
|
||||||
|
|
||||||
for tier in 1 2 3 4; do
|
if [[ "$any_tiers" == true ]]; then
|
||||||
containers=$(get_array "FALLBACK_${covering}_COVERS_${covered}_TIER${tier}")
|
for covering in "${ALL_HOST_IDS[@]}"; do
|
||||||
[[ -z "$containers" ]] && continue
|
[[ "$covering" == "$covered" ]] && continue
|
||||||
any_tiers=true
|
|
||||||
tier_containers[$tier]="$containers"
|
|
||||||
delay_var="${covered}_TIER${tier}_DELAY"
|
|
||||||
tier_delays[$tier]="${!delay_var:-0}"
|
|
||||||
done
|
|
||||||
|
|
||||||
[[ "$any_tiers" == true ]] && {
|
|
||||||
covering_owner_var="${covering}_OWNER"
|
covering_owner_var="${covering}_OWNER"
|
||||||
covering_owner="${!covering_owner_var:-$covering}"
|
covering_owner="${!covering_owner_var:-$covering}"
|
||||||
covered_by="$covering ($covering_owner)"
|
covered_by="${covered_by:+$covered_by, }$covering ($covering_owner)"
|
||||||
}
|
done
|
||||||
done
|
fi
|
||||||
|
|
||||||
[[ "$any_tiers" == false ]] && continue
|
[[ "$any_tiers" == false ]] && continue
|
||||||
|
|
||||||
|
|||||||
@@ -512,7 +512,7 @@ gather_partner_fallback_containers() {
|
|||||||
eval "${out_var}=()"
|
eval "${out_var}=()"
|
||||||
local tier var
|
local tier var
|
||||||
for tier in TIER1 TIER2 TIER3 TIER4; do
|
for tier in TIER1 TIER2 TIER3 TIER4; do
|
||||||
var="FALLBACK_${MY_ID}_COVERS_${REMOTE_ID}_${tier}"
|
var="FALLBACK_${REMOTE_ID}_${tier}"
|
||||||
# Check if var is set and is an array
|
# Check if var is set and is an array
|
||||||
if declare -p "$var" >/dev/null 2>&1; then
|
if declare -p "$var" >/dev/null 2>&1; then
|
||||||
local -a _tmp_arr
|
local -a _tmp_arr
|
||||||
|
|||||||
@@ -109,19 +109,17 @@ function vv_fallback_active(): array {
|
|||||||
if ($c) $running[strtolower($c['n'])] = $c['i'];
|
if ($c) $running[strtolower($c['n'])] = $c['i'];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse FALLBACK arrays from this host's conf
|
|
||||||
$confFile = strtolower($myId) . '.conf';
|
|
||||||
$rawConf = vv_read_conf_raw($confFile);
|
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
foreach ($allHostIds as $covered) {
|
foreach ($allHostIds as $covered) {
|
||||||
if ($covered === $myId) continue;
|
if ($covered === $myId) continue;
|
||||||
$coveredHostname = $vars[$covered] ?? '';
|
$coveredHostname = $vars[$covered] ?? '';
|
||||||
if (!$coveredHostname) continue;
|
if (!$coveredHostname) continue;
|
||||||
|
|
||||||
|
// Covered host defines its own recovery profile — read from their conf
|
||||||
|
$coveredRaw = vv_read_conf_raw(strtolower($covered) . '.conf');
|
||||||
$names = [];
|
$names = [];
|
||||||
for ($tier = 1; $tier <= 4; $tier++)
|
for ($tier = 1; $tier <= 4; $tier++)
|
||||||
$names = array_merge($names, vv_parse_bash_array($rawConf, "FALLBACK_{$myId}_COVERS_{$covered}_TIER{$tier}"));
|
$names = array_merge($names, vv_parse_bash_array($coveredRaw, "FALLBACK_{$covered}_TIER{$tier}"));
|
||||||
|
|
||||||
$active = [];
|
$active = [];
|
||||||
foreach ($names as $name) {
|
foreach ($names as $name) {
|
||||||
|
|||||||
Reference in New Issue
Block a user