fix: \sleep 1\ polling loop violates AGENTS.md 'never use fixed delays' principle (#878)

Replace fixed \`sleep 1\` in the container teardown poll loop with exponential
backoff (100ms → 200ms → … → 2000ms cap). The 30s hard timeout is preserved.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
openhands 2026-03-17 16:07:58 +00:00
parent bce6d5ddce
commit e2554eb844

View file

@ -289,15 +289,17 @@ PYEOF
'{completed: $arr, last_updated: now | todate}' > "$PROGRESS_FILE"
log "DONE $seed_name"
# 6. Teardown — poll until all containers have exited (no fixed sleep)
# 6. Teardown — poll until all containers have exited (exponential backoff, no fixed delay)
cd "$REPO_ROOT" && docker compose down -v 2>/dev/null || true
_deadline=$(( $(date +%s) + 30 ))
_backoff_ms=100
while [[ -n "$(docker compose ps --quiet 2>/dev/null)" ]]; do
if [[ $(date +%s) -ge $_deadline ]]; then
log "WARNING: containers still present after 30s — proceeding anyway"
break
fi
sleep 1
sleep "$(awk "BEGIN{printf \"%.1f\", $_backoff_ms / 1000}")"
(( _backoff_ms = _backoff_ms * 2 > 2000 ? 2000 : _backoff_ms * 2 ))
done
done