reload_dshackle: cut gateway connections on handler completion (~30 ms) instead of a fixed 3 s settle #81

Merged
claude merged 1 commits from reload-settle-poll into main 2026-09-19 09:54:22 +00:00
Showing only changes of commit 6f4b297733 - Show all commits

View File

@@ -208,8 +208,19 @@ for CID in $(docker ps -q -f "name=dshackle"); do
RC=1 RC=1
continue continue
fi fi
sleep "$SETTLE" # Poll for the handler's completion line instead of sleeping SETTLE: the reload itself
LOGS=$(docker logs --since "$T0" "$CID" 2>&1) # 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="" REASON=""
if echo "$LOGS" | grep -qF "$FAIL_MARK"; then if echo "$LOGS" | grep -qF "$FAIL_MARK"; then
REASON=$(echo "$LOGS" | grep -F "$FAIL_MARK" | head -1) REASON=$(echo "$LOGS" | grep -F "$FAIL_MARK" | head -1)