frank-primary: deploy health gate reads the body (FreeToken 200-loading)

FreeToken's /health returns 200 with {"status":"loading"} while the
engine loads — the FastAPI front end binds before the scheduler is up.
Measured 2026-10-06: the deploy gate went green after 6s while 131 shards
were still paging in (vLLM 503'd during load, which made the bare curl
honest there). The frank-primary gate now loops until status:ok; the
MainPID stray-port guard is unchanged.
This commit is contained in:
Frank
2026-10-05 19:27:21 -07:00
parent 0ff016a6b2
commit 6ba19f6f48
2 changed files with 27 additions and 2 deletions
+20 -1
View File
@@ -1339,7 +1339,26 @@ deploy_llm_primary() {
run_privileged systemctl restart frank-primary.service
# Cold start: FP8 page-in plus torch compile/graph capture (~15 min cold,
# measured 2026-09-29). Parity with every predecessor on this port.
wait_for_health frank-primary http://127.0.0.1:7770/health 1800 || return 1
# FreeToken's /health returns 200 with {"status":"loading"} while the
# engine loads (the FastAPI front end binds before the scheduler is
# up), so a bare 200 false-greens — measured 2026-10-06: "healthy after
# 6 s" while 131 shards were still paging in. vLLM 503'd during load,
# which made the bare curl honest there; FreeToken needs the BODY read.
# Only status:"ok" counts. (The MainPID check below still guards the
# stray-port case.)
local i ok=0
for ((i=1; i<=900; i++)); do
if curl -fsS http://127.0.0.1:7770/health 2>/dev/null | grep -q '"status":"ok"'; then
echo "frank-primary engine healthy after approximately $((i * 2))s"
ok=1
break
fi
sleep 2
done
if [[ "$ok" != 1 ]]; then
echo "FAIL: frank-primary never reached /health status ok in 1800s" >&2
return 1
fi
# False-green hardening (the 2026-09-26 lesson): a bare curl against the
# port cannot tell WHO answers — a stray probe holding :7770 satisfies
# it while the unit is stopped. The deploy is only green if the unit