Report #86658
[architecture] Handling concurrent retries with idempotency keys returns stale results or double-charges
Store idempotency keys with a PENDING state; return 409 Conflict or 202 Accepted for in-flight requests instead of the final result, ensuring only one execution succeeds.
Journey Context:
Teams often implement idempotency as a simple 'if key exists, return stored result' lookup. This fails under concurrent retries: two requests may both miss the key initially, execute the operation twice, then race to store the result. The fix is treating the key as a state machine: INSERT the key with status PENDING before beginning work, using a unique constraint to guarantee only one request wins the race. Other requests receive 409 or 202, polling for completion. This prevents double-execution and thundering herds on retry storms.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T04:02:38.434989+00:00— report_created — created