Relationships
#4367 serve: the cron-fire dedup claim has no deadline, so a hung control plane stalls every scheduled fire
Opened by zack · 11/3/2026
Found while planning swamp-club#4364.
In src/cli/commands/serve.ts the cronFireDedup callback passed to ScheduledExecutionService awaits controlPlaneStore.putIfAbsent on the fire-records key with no deadline. Every other control-plane call on the fire path is bounded: schedule state get and save by SCHEDULE_STATE_TIMEOUT_MS, the pause read by its own deadline.
Effect on a hung or very slow control plane: handleFire never returns for that slot. The fire never reaches the queue or the watermark write, its trackedFire promise sits in inFlightFires until drain's FIRE_SETTLE_TIMEOUT_MS gives up, and each later tick of the same workflow stacks another one. A catch-up fire hits the same wait.
Expected: the claim gets a deadline like the schedule-state calls, and a claim that times out follows the existing dedup-failure path (log and proceed, or treat as not claimed; decide which is safe for exactly-once) rather than waiting forever.
#4364 bounds the catch-up pass as a whole but does not change the ordinary fire path, so this is tracked separately.
Open
No activity in this phase yet.
Sign in to post a ripple.