Incident Library
Applied filters Root causeDependency failureSymptomHigh error rateFactorOverlapping failuresClear allEvery case under the filters, with no sentence; newest first.
Suggested filters Search, and the values found in your words appear here.

Graph

  • Root cause
  • Component
  • Symptom
  • Contributing factor
  • Case

Cases2 cases

1 to 2 of 2

  1. Symptoms

    For about two weeks in August 2026, some PyPI users got intermittent 502 and 503 errors when downloading files from files.pythonhosted.org, and installations from PyPI failed. The first two reports of persistent 502s were opened in the support tracker on 17 August.

    Trigger

    A partial rollback during a canary deployment inside Fastly's network, whose canary cohort had included PyPI's traffic for a number of years, left the caching configuration of one Seattle point of presence reverted while the routing configuration in front of it was not.

    Root cause
    Component
    Contributing factor
    Detection

    Users filed reports in the PyPI support tracker; one report isolated the 502s to a single Fastly cache node using the x-served-by headers of the failing responses.

    Remediation
    • Fastly's network operations removed the routing override that sent part of PyPI's traffic to the affected point of presence
    • Fixed the B2-to-S3 fallback for the case where B2 does not respond at all (infra#237)
    • Exempted suffix and multi-range requests from segmented caching (infra#241, infra#243)
    • Fastly patched the canary configuration bug and removed all PSF traffic from its canary cohort
    • Moved the segmented-caching exemption check after URL normalization (infra#245)
    Action items
    • Improve the logging configuration of the file hosting service (infra#238)
    • Reject HTTP methods that a file host should not receive (infra#239)
    • Follow a support ticket with Fastly about segmented-caching range handling, and revert PyPI's own handling code once Fastly fixes it
    • Return to Fastly's canary program once clearer controls and notifications exist around that traffic
    • Hire an infrastructure engineer, partly for PyPI, to catch conditions like this earlier
    Lessons

    None of the PyPI configuration bugs were new; they had been in the configuration for a while and came out only when real traffic on large files with range requests forced an investigation. The 5xx baseline was already noisy, so the start of the Fastly problem was easy to miss, and part of that noise turned out to be one of the bugs.

  2. Symptoms

    At 5:27 AM UTC on 17 February 2026 part of OpenRouter's users started getting 500 errors on all API endpoints, and from 5:40 AM many requests failed with 401 "User not found" errors although their API keys were valid. The chatroom was degraded at the same time. The same pattern came back at 7:36 AM UTC on 19 February.

    Trigger

    The third-party caching layer in front of API key lookups dropped all of its connections to OpenRouter's database and began returning errors.

    Root cause
    Component
    Contributing factor
    Detection

    An internal alert fired one minute after impact began on 17 February, at 5:28 AM UTC, and two minutes after it began on 19 February, at 7:38 AM UTC, and the response team came online to investigate.

    Remediation
    • Deployed WAF rules to block the denial-of-service attack running at the same time on 17 February
    Action items
    • Add circuit breakers that detect caching layer failures, limit their blast radius and repopulate a cold cache in a controlled way
    • Return 503 instead of 401 when an authorization lookup cannot complete because of an infrastructure problem
    • The caching provider fixes the failure mode that caused both incidents
    • Roll out a fallback caching mechanism so OpenRouter survives even extended downtime of the caching layer
    Lessons

    Answering an infrastructure failure with an authentication error made customers debug API keys that were fine, so error codes have to say what actually failed. Attributing the first outage to a concurrent denial-of-service attack, because the caching dependency had always been reliable, left the real fault in place until it recurred two days later. OpenRouter holds that redundancy against failures in its dependencies is its own responsibility, not the provider's.

Check your cluster for this

These 2 cases involve In-memory cache and CDN and edge network. kubegap audits a Kubernetes cluster for gaps like these, read-only, from Claude Code or Codex; its checks cite public reports like the ones in this library.

By root cause1