deploy-vps healthcheck wait is a hard-coded 60s #23
Labels
No labels
priority/P0
priority/P1
priority/P2
priority/P3
size/L
size/M
size/S
size/XL
size/XS
state/done
state/in-progress
state/in-review
state/needs-refinement
state/ready
type/bug
type/chore
type/feature
type/refactor
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
amtronics/platform-actions#23
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
deploy-vpswaits for every container named inhealthcheck-containersto reporthealthybefore it calls a deployment successful. The wait is a fixed
seq 1 30withsleep 2— sixtyseconds, hard-coded, with no input to change it.
Sixty seconds is fine on a fast host and impossible on a slow one. On 2026-09-02 the
ahmad/portfoliodeploy (run 2156) failed this way while the deployment itself was fine:The container took 169 seconds to bind. Nothing was wrong with it — the
appshost iscurrently I/O saturated (
io_fullavg300 65.8, load 6.6), so process start is slow. The waitgave up 63 seconds before the application had even opened its port, then printed
did not become healthyand 50 lines of an empty log, which is the least informative possibleoutput for this failure.
The trigger is host saturation; the fragility is that the timeout cannot be raised without
editing the shared action. Any repo deploying to a loaded host hits this, and a false deploy
failure is worse than a slow one — it trains people to ignore red deploys.
Scope
deploy-vpswith a default at least asgenerous as today's behaviour; report the elapsed wait and the container's last health status
in the failure message; when a container has never logged anything, say so rather than
printing an empty log tail.
start_period(that is the calling repo's own compose), and theappshost saturation itself (tracked inamtronics/infrastructure-vps).Acceptance criteria
Taking this, and it needs a status note first: we filed the same defect twice, an hour apart, from different evidence. #22 came from the pipeline side (two red deploys on
ahmad/portfoliowhile production served the version they had just deployed); this one came from the host side, with the timing that actually explains it — the container took 169 seconds to bind, and the wait gave up 63 seconds before the application had even opened its port. That number is the better evidence, and it is why the default in the fix is 600 rather than 120.Already delivered by v3.5.2 (#24, merged; the moving
v3tag now points at it):health-timeout, so a container taking longer than sixty seconds succeeds.unhealthybehaviour are in the README table and prose.unhealthyfails immediately rather than waiting out the budget, and a container reporting no health status at all — a wrong name, or an image with noHEALTHCHECK— fails after a thirty-second grace.Not delivered, and what I am doing here:
Criterion 1 I am going to fail deliberately, and would rather say so than quietly pass it. It asks that a caller setting nothing behaves as today. v3.5.2 changed exactly that: the default wait went from 60s to 600s. Preserving the old default would have left every repository on the broken behaviour until each one opted out, and the argument in #22 is that the rollout has already happened by then — a short budget does not undo anything, it only decides whether the pipeline tells the truth. If you would rather have the old default back, that is a one-line change and I will make it.