You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
proxysql/test/infra/infra-mysql57/bin/docker-orchestrator-post.bash

82 lines
2.5 KiB

#!/bin/bash
set -e
set -o pipefail
[ -f .env ] && . .env
# Ensure INFRA is set correctly
if [ -z "${INFRA}" ] || [ "${INFRA}" == "." ]; then
export INFRA=$(basename $(cd $(dirname $0)/.. && pwd))
fi
PROXY_CONTAINER="proxysql.${INFRA_ID}"
echo ">>> Configuring Orchestrator via ${PROXY_CONTAINER} (Infra: ${INFRA})"
orc_exec() {
docker exec -e ORCHESTRATOR_API="http://orc1.${INFRA}:3000/api" "${PROXY_CONTAINER}" orchestrator-client "$@"
}
echo -n "Waiting for Orchestrator API..."
MAX_WAIT=60
COUNT=0
while ! orc_exec -c clusters >/dev/null 2>&1; do
echo -n "."
sleep 2
COUNT=$((COUNT+2))
if [ $COUNT -gt $MAX_WAIT ]; then echo " FAILED"; exit 1; fi
done
echo " OK."
# Use -c discover and -i host:port
echo ">>> Triggering discovery of MySQL nodes..."
for i in 1 2 3; do
HOST="mysql${i}.${INFRA}"
orc_exec -c discover -i "${HOST}:3306" >/dev/null 2>&1 || true
done
echo ">>> Waiting for topology to settle..."
MAX_WAIT=30
COUNT=0
CLUSTER_NAME=""
while [ -z "$CLUSTER_NAME" ]; do
# Try to find which cluster our primary belongs to
CLUSTER_NAME=$(orc_exec -c which-cluster -i "mysql1.${INFRA}:3306" 2>/dev/null | head -n 1)
# Fallback: Just take any cluster name if which-cluster fails but clusters is not empty
if [ -z "$CLUSTER_NAME" ]; then
CLUSTER_NAME=$(orc_exec -c clusters 2>/dev/null | head -n 1)
fi
if [ -n "$CLUSTER_NAME" ]; then break; fi
echo -n "."
sleep 2
COUNT=$((COUNT+2))
if [ $COUNT -gt $MAX_WAIT ]; then
echo " WARNING: Still waiting for cluster discovery after ${MAX_WAIT}s"
break
fi
done
echo " OK."
if [ -n "$CLUSTER_NAME" ]; then
echo ">>> Verifying Replication Topology for Cluster: ${CLUSTER_NAME}"
echo "--------------------------------------------------------------------------------"
# We use -c topology -i to get the text diagram
TOPOLOGY=$(orc_exec -c topology -i "${CLUSTER_NAME}")
echo "$TOPOLOGY"
echo "--------------------------------------------------------------------------------"
# Check for replication issues (look for anything not [ok])
# Note: Orchestrator topology output uses [ok] for healthy nodes
ISSUES=$(echo "$TOPOLOGY" | grep -E "\[.*\]" | grep -v "\[ok\]" || true)
if [ -n "$ISSUES" ]; then
echo "WARNING: Potential replication issues detected in topology!"
echo "$ISSUES"
else
echo "SUCCESS: Replication topology is healthy."
fi
else
echo "ERROR: Orchestrator failed to discover any cluster."
exit 1
fi