fix(preview): add 60-second grace period before zombie killer murders booting dev servers throwing 504s

This commit is contained in:
2026-06-12 15:05:24 -07:00
parent 5a7e1abcc7
commit 27a1f308d0

View File

@@ -825,8 +825,17 @@ async function loadPreviews(projectId: string): Promise<Preview[]> {
ping.status === 504 || ping.status === 504 ||
ping.status === 404 ping.status === 404
) { ) {
// GRACE PERIOD: If the server was started less than 60 seconds ago,
// Traefik might return a 502/504 simply because the Node process hasn't
// finished booting and binding to the port yet. Do not kill it!
const ageMs = Date.now() - new Date(r.started_at).getTime();
if (ageMs < 60_000) {
activePreviews.push(r); // Give it the benefit of the doubt
return;
}
console.warn( console.warn(
`[anatomy] Preview zombie detected for ${r.preview_url} (HTTP ${ping.status}). Marking stopped.`, `[anatomy] Preview zombie detected for ${r.preview_url} (HTTP ${ping.status}, age ${Math.round(ageMs / 1000)}s). Marking stopped.`,
); );
await query( await query(
`UPDATE fs_dev_servers SET state = 'stopped' WHERE id = $1`, `UPDATE fs_dev_servers SET state = 'stopped' WHERE id = $1`,