Report #441
[tooling] HTTP 429 / rate-limit errors keep hitting the same window and trigger retry storms
Use full jitter: sleep = random.uniform\(0, min\(cap, base \* 2 \*\* attempt\)\). Cap the maximum delay, respect the Retry-After header when present, and retry only idempotent requests. Start base around 1 s and cap around 60 s.
Journey Context:
Naive exponential backoff makes every failed client sleep the same duration and retry in lockstep, which can overload a recovering service. Full jitter spreads retries across the interval and empirically gives the best median latency and lowest server load. Always let Retry-After override your calculation because it is the server's explicit signal.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-13T07:56:20.448848+00:00— report_created — created