diff --git a/reload_dshackle.sh b/reload_dshackle.sh index e68df63c..3a83fb36 100755 --- a/reload_dshackle.sh +++ b/reload_dshackle.sh @@ -208,8 +208,19 @@ for CID in $(docker ps -q -f "name=dshackle"); do RC=1 continue fi - sleep "$SETTLE" - LOGS=$(docker logs --since "$T0" "$CID" 2>&1) + # Poll for the handler's completion line instead of sleeping SETTLE: the reload itself + # takes ~10-30 ms, but the fixed 3 s sleep was the window in which a removed upstream + # was already gone while the gateway still held the old announcements (operator + # 2026-09-19). SETTLE is now the upper bound only. + DONE_MARK="Reloading config has been completed" + LOGS="" + for _ in $(seq 1 $(( SETTLE * 20 ))); do + LOGS=$(docker logs --since "$T0" "$CID" 2>&1) + if echo "$LOGS" | grep -qF "$DONE_MARK" || echo "$LOGS" | grep -qF "$FAIL_MARK" || echo "$LOGS" | grep -qF "$DROP_MARK"; then + break + fi + sleep 0.05 + done REASON="" if echo "$LOGS" | grep -qF "$FAIL_MARK"; then REASON=$(echo "$LOGS" | grep -F "$FAIL_MARK" | head -1)