Skip to content

Commit 72b35f2

Browse files
bpamiriclaude
andcommitted
ci(compat): widen CF readiness headroom; fail the serialfilter wait
Over four compat-matrix runs the Adobe engines answered on attempt 42-57 (2023) and 48-60 (2025) of a 60-attempt ceiling, so a slightly slower runner turns the leg red. Raise the ceiling to 120 in compat-matrix.yml and compat-pr.yml, print "attempt N/MAX", and warn when readiness lands past 3/4 of the ceiling so drift is visible before it fails. The post-restart wait after patching serialfilter.txt (Adobe + Oracle) fell through silently when the engine never came back, so the suite ran against a dead engine. Give it the READY flag from #3692, the same ceiling, and a loud failure with container logs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Peter Amiri <peter@alurium.com>
1 parent eb4bece commit 72b35f2

2 files changed

Lines changed: 41 additions & 8 deletions

File tree

‎.github/workflows/compat-matrix.yml‎

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,14 @@ jobs:
109109
# Tracks the last HTTP status code so timeout diagnostics can
110110
# distinguish "no response" (engine didn't bind) from "5xx"
111111
# (engine bound but app returning errors — e.g. issue #2646).
112-
MAX_WAIT=60
112+
#
113+
# Ceiling: measured over four matrix runs (2026-09-27), the Adobe
114+
# engines answered on attempt 42-57 (2023) and 48-60 (2025) of the old
115+
# 60; Lucee and BoxLang on 1-12. 120 leaves ~2x the observed worst
116+
# case. Each attempt is ~5-10s, so a dead engine now fails after
117+
# ~10-20 min instead of ~5-10. A ready-after-3/4 warning (below)
118+
# makes future drift visible before it turns red.
119+
MAX_WAIT=120
113120
WAIT_COUNT=0
114121
RESTARTS=0
115122
MAX_RESTARTS=3
@@ -143,7 +150,10 @@ jobs:
143150
LAST_HTTP_CODE=$(curl -s -o /dev/null --connect-timeout 2 --max-time 5 -w "%{http_code}" "http://localhost:${PORT}/" 2>/dev/null || true)
144151
LAST_HTTP_CODE=${LAST_HTTP_CODE:-000}
145152
if echo "$LAST_HTTP_CODE" | grep -qE "^(200|302|404)$"; then
146-
echo "CF engine is ready! (HTTP $LAST_HTTP_CODE on attempt $WAIT_COUNT)"
153+
echo "CF engine is ready! (HTTP $LAST_HTTP_CODE on attempt $WAIT_COUNT/$MAX_WAIT)"
154+
if [ $((WAIT_COUNT * 4)) -gt $((MAX_WAIT * 3)) ]; then
155+
echo "::warning::${CFENGINE} became ready at attempt $WAIT_COUNT/$MAX_WAIT (past 3/4 of the ceiling); readiness headroom is shrinking."
156+
fi
147157
READY=true
148158
break
149159
fi
@@ -186,19 +196,35 @@ jobs:
186196
"echo ';oracle.sql.converter.**;oracle.sql.**;oracle.jdbc.**' >> /wheels-test-suite/.engine/${{ matrix.cfengine }}/WEB-INF/cfusion/lib/serialfilter.txt"
187197
docker restart wheels-${{ matrix.cfengine }}-1
188198
189-
# Wait for engine to come back up after restart
199+
# Wait for engine to come back up after restart. This used to fall
200+
# through silently when the engine never came back, so the suite ran
201+
# against a dead engine; fail loudly instead. A full Adobe restart has
202+
# the same cold-start profile as the readiness wait above, so it gets
203+
# the same ceiling (the old 30 was never measured: it could not fail).
190204
PORT_VAR="PORT_${{ matrix.cfengine }}"
191205
PORT="${!PORT_VAR}"
192-
MAX_WAIT=30
206+
CONTAINER="wheels-${{ matrix.cfengine }}-1"
207+
MAX_WAIT=120
193208
WAIT_COUNT=0
209+
READY=false
194210
while [ "$WAIT_COUNT" -lt "$MAX_WAIT" ]; do
195211
WAIT_COUNT=$((WAIT_COUNT + 1))
196212
if curl -s -o /dev/null --connect-timeout 2 --max-time 5 -w "%{http_code}" "http://localhost:${PORT}/" | grep -q "200\|404\|302"; then
197-
echo "CF engine back up after restart"
213+
echo "CF engine back up after restart (attempt $WAIT_COUNT/$MAX_WAIT)"
214+
READY=true
198215
break
199216
fi
200-
sleep 5
217+
if [ "$WAIT_COUNT" -lt "$MAX_WAIT" ]; then
218+
sleep 5
219+
fi
201220
done
221+
if [ "$READY" != "true" ]; then
222+
echo "::error::CF engine did not come back after the serialfilter restart (${MAX_WAIT} attempts)"
223+
echo "=== Container logs (raw, last 200 lines) ==="
224+
docker logs "$CONTAINER" 2>&1 | tail -200
225+
echo "=== /end raw logs ==="
226+
exit 1
227+
fi
202228
203229
- name: Install CFPM packages (Adobe 2023/2025)
204230
if: matrix.cfengine == 'adobe2023' || matrix.cfengine == 'adobe2025'

‎.github/workflows/compat-pr.yml‎

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,11 @@ jobs:
9898
CONTAINER="wheels-${CFENGINE}-1"
9999
echo "Waiting for ${CFENGINE} on port ${PORT}..."
100100
101-
MAX_WAIT=60
101+
# Ceiling: Adobe 2023 answered on attempt 42-57 of the old 60 across
102+
# four compat-matrix runs (2026-09-27); BoxLang on 7-12. 120 leaves ~2x
103+
# the observed worst case; a dead engine fails after ~10-20 min, inside
104+
# this job's 45-minute timeout. See compat-matrix.yml for the details.
105+
MAX_WAIT=120
102106
WAIT_COUNT=0
103107
RESTARTS=0
104108
MAX_RESTARTS=3
@@ -128,7 +132,10 @@ jobs:
128132
LAST_HTTP_CODE=$(curl -s -o /dev/null --connect-timeout 2 --max-time 5 -w "%{http_code}" "http://localhost:${PORT}/" 2>/dev/null || true)
129133
LAST_HTTP_CODE=${LAST_HTTP_CODE:-000}
130134
if echo "$LAST_HTTP_CODE" | grep -qE "^(200|302|404)$"; then
131-
echo "CF engine is ready! (HTTP $LAST_HTTP_CODE on attempt $WAIT_COUNT)"
135+
echo "CF engine is ready! (HTTP $LAST_HTTP_CODE on attempt $WAIT_COUNT/$MAX_WAIT)"
136+
if [ $((WAIT_COUNT * 4)) -gt $((MAX_WAIT * 3)) ]; then
137+
echo "::warning::${CFENGINE} became ready at attempt $WAIT_COUNT/$MAX_WAIT (past 3/4 of the ceiling); readiness headroom is shrinking."
138+
fi
132139
READY=true
133140
break
134141
fi

0 commit comments

Comments
 (0)