Incident review · INC-2026-07-30
One full queue stopped every ingestion producer
For 1 hour 52 minutes, a single saturated queue turned local backpressure into a platform-wide halt. Consumer scaling restored service; it did not remove the failure mode.
Impact at a glance
Checkout, Catalog, and Inventory returned 503 or blocked while the gateway waited on the queue. No events were corrupted; freshness and acceptance were unavailable.
Verified from pager timestamps, gateway 5xx counts, queue depth, and warehouse freshness for the incident window.
Timeline
UTC- Detected. Lag crossed 120 seconds for five minutes; the on-call page fired.
- Scoped. Consumers were alive, but queue depth continued to rise faster than drain rate.
- Mitigated. The on-call added one consumer replica. Lag flattened briefly, then resumed climbing.
- Escalated. Gateway requests began timing out; every producer entered hard failure.
- Recovered. A second scale-up drained the queue and producer acceptance returned.
- Validated. Warehouse freshness returned below ten minutes and no replay gap remained.
Cause, not symptom
3 linksTrigger
Burst exceeded drain rate
Checkout traffic rose while one consumer was recycling.
Amplifier
One queue held every producer
Healthy producers had no independent path or bounded shed behavior.
Outcome
Backpressure reached the gateway
Requests blocked until clients saw timeouts and 503 responses.
Root cause: ingestion had one queue and no failure boundary. Scaling consumers changed recovery time, not the architecture that allowed one queue to stop all producers.
Response review
people + processWorked
The runbook found the right control
The on-call opened the lag dashboard immediately and the documented scale command was safe to repeat.
Failed
The alert described lag, not blast radius
The first page did not say every producer shared the queue, delaying escalation until hard failures began.
Detection also waited for five minutes above 120 seconds. That protected against noisy pages but consumed most of the buffer before a human could respond.
Actions that change the next incident
owned| Action | Owner | Due | Proof |
|---|---|---|---|
| Split ingestion into two independently recoverable queues | Platform | 2026-09-30 | Chaos test isolates one failed queue |
| Page at 60 seconds of lag with producer blast radius in the message | Reliability | 2026-08-21 | Alert fixture and game-day page |
| Add bounded shed counts and retry guidance to the gateway dashboard | Platform | 2026-09-05 | Dashboard review with producer teams |
Closure condition: this review closes when the alert and dashboard actions are verified. The architectural action remains tracked by RFC 014 until its isolation test passes.