Compare commits

...

2 Commits

Author SHA1 Message Date
9112b279d9 Merge pull request 'reload_dshackle: cut gateway connections on handler completion (~30 ms) instead of a fixed 3 s settle' (#81) from reload-settle-poll into main 2026-09-19 09:54:21 +00:00
rob
6f4b297733 reload_dshackle: cut gateway connections as soon as the SIGHUP handler reports completion (~30ms) instead of after a fixed 3s settle
The reload is in-process and takes 10-30 ms; the fixed sleep was the window in
which a removed upstream was already unrouted in dshackle while the gateway still
held the old announcements and kept sending queries it could no longer answer.
Poll the log for 'Reloading config has been completed' (or the fail/drop
markers), SETTLE stays the upper bound. Operator 2026-09-19.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KjqejYycVyVvrxV9aTDhgX
2026-09-19 09:50:03 +00:00

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
# 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) 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)