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

Cases5 cases

1 to 5 of 5

  1. 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.

  2. Symptoms

    On the afternoon of 28 October 2021 (13:37 PST), Vault performance at Roblox degraded and a single Consul server showed high CPU load. Consul cluster metrics showed that writes to its key-value (KV) store had a 50th percentile latency of 2 seconds instead of the usual under 300 ms. Players were not yet affected.

    Trigger

    On 27 October at 14:00, one day before the outage, Roblox enabled the Consul streaming feature on the backend service responsible for traffic routing and, to prepare for end-of-year traffic, added 50% more nodes to traffic routing.

    Root cause
    Component
    Contributing factor
    Detection

    Roblox engineers began investigating when Vault performance degraded and a single Consul server had high CPU load, before players were affected. Consul cluster metrics then showed elevated KV write latency.

    Remediation
    • Replaced one Consul cluster node on the suspicion of degraded hardware
    • Replaced all Consul nodes with 128-core machines with faster NVMe SSDs
    • Shut down the Consul cluster and reset its state from a snapshot taken at the start of the outage, with access blocked by iptables
    • Blocked external traffic, disabled all non-essential Consul use, scaled services down and lowered health check frequency from 60 seconds to 10 minutes
    • Moved the Consul cluster back to 64-core servers
    • Disabled the streaming feature for all Consul systems, which brought KV write latency back to 300ms
    • Kept the slow Consul servers from staying elected as leader
    • Redeployed the caching system and fixed its wrong scheduling data and failed deployments
    • Restarted the stopped services at the right capacity levels
    • Let players back in with DNS steering in roughly 10% steps while checking database load, cache performance and stability
    Action items
    • HashiCorp builds laboratory benchmarks and scale tests that reproduce the streaming contention
    • HashiCorp improves the design of streaming so it does not contend under extreme load
    • Compact the BoltDB database with existing BoltDB tooling
    • Remove the circular dependency between the telemetry systems and Consul
    • Extend telemetry with targeted alerts on Consul and BoltDB performance and with visibility into traffic between services and Consul
    • Run the backend in an additional, geographically distinct data center and in multiple availability zones
    • Split critical services into their own dedicated Consul clusters
    • Move data that core services keep directly in the Consul KV store to a more suitable storage system
    • Delete obsolete KV data from Consul
    • Upgrade to a Consul version that replaces BoltDB with bbolt, in Q1
    • Redesign cache deployment so the cache system can be brought up quickly from a standing start
    • Deploy Nomad enhancements that make it easier to turn up large jobs after a long period of unavailability
    • Use mechanisms for faster machine configuration changes
    • Reintroduce streaming only after a new implementation has been tested at Roblox's scale and workload
    Lessons

    Two mostly unrelated problems deep inside Consul, contention in streaming under very high read and write load and BoltDB freelist growth, were hard to diagnose, and that difficulty was the main reason the outage lasted so long. A single Consul cluster serving every workload made the impact larger, and monitoring that depended on Consul hid the cause when it was needed most. Faster hardware did not help and may have hurt, because the contention was worse on NUMA machines. HashiCorp had benchmarked streaming at a similar scale, but the problem needed both a large number of streams and a high churn rate. Restarting a platform from a fully stopped state, including warming caches, took a long time and needed tools built for bootstrapping rather than incremental change.

  3. Symptoms

    At about 14:01 PDT on 13 October 2017, Discord engineers were alerted to anomalies by real-time metrics and monitoring. A Redis instance that was the primary of a highly available cluster used by the API services had dropped offline after Google Cloud Platform migrated it automatically, and some API instances did not handle the failover to the secondary node correctly.

    Trigger

    Google Cloud Platform automatically migrated the Redis instance that was the primary of a highly available cluster used by the API services, and the node incorrectly dropped offline.

    Root cause
    Component
    Contributing factor
    Detection

    Real-time metrics and monitoring alerted engineers at 14:01 PDT. The second phase was seen at 15:41 as another anomaly in monitoring, and end user reports of servers appearing offline were escalated at 15:42.

    Remediation
    • Ran a rolling restart of all API instances to clear the Redis connection issues
    • Corrected the misconfigured edge caching rule for the expensive API route
    • Disabled the problem API endpoint on the edge network
    • Recovered the Cassandra cluster
    • Ran a second rolling restart of all API instances for the latency left by the Cassandra issues
    • Removed the misbehaving guilds node from the service hashring
    • Forcefully restarted the misbehaving guilds node
    • Restarted the whole service, forcing all users to reconnect
    • Blocked traffic that relied on the failing push component to reduce its load
    • Corrected the API setting that lets users reconnect quickly and safely
    Action items
    • Fix the known issues with Redis failover within the coming weeks
    • Change the cached route so this type of error does not degrade other services
    • Monitor the signals that would have warned of the cascading failure
    • Improve the reliability and failure handling of the affected services
    • Roll out an update of the library with the suspected flaws
  4. Symptoms

    At 7:12pm Eastern Time on 5 July 2016, logs.cloud.gov, the cloud.gov log search service, sent users into a login redirect loop, so they could not log in to the service.

    Root cause
    Component
    Contributing factor
    Remediation
    • Moved Redis on the logsearch service to a much larger memory instance so it could keep logs while Elasticsearch was down
    • Corrected the Elasticsearch memory limits and the /tmp noexec hardening setting and redeployed the cluster
    • Redeployed the Kibana instance and verified the logs once the cluster deployment was complete
    Action items
    • Add a failure alert that checks whether logs are coming through
    • Make Redis auto-scaling or highly available so that failures in more fragile downstream components do not cause data loss
    • Extend the incident response plan to start with events that are not security-specific
    • Create a chaos bot for the logs.cloud.gov service
  5. Symptoms

    On 8 February 2016 at 17:45 UTC, four nodes of the Redis Cloud cluster us-central1-1-1.gce.garantiadata.com on Google Cloud Platform stopped responding, four minutes after a first node had failed. The databases whose endpoints end in us-central1-1-1.gce.garantiadata.com went down.

    Trigger

    The weekly upgrade of Redis Cloud's non-critical cluster components reached its first Google Cloud Platform cluster, us-central1-1-1.gce.garantiadata.com, at 17:30 UTC.

    Root cause
    Component
    Contributing factor
    Remediation
    • Shut down and terminated all nodes of the cluster
    • Deleted all of the cluster's endpoints from its DNS zone, removing by hand the entries left by throttled deletes
    • Provisioned new cluster nodes from scratch without the weekly update
    • Reconnected the original nodes' storage to the new nodes so persistence-enabled databases could be recovered
    • Bootstrapped and launched the databases, recovering the ones with persistence from storage
    Action items
    • Suspend all automatic weekly upgrades until a procedure that prevents this kind of outage is in place
    • Revalidate the QA processes for DevOps code deployments
    • Improve the tooling so it handles throttling of DNS requests
Check your cluster for this

These 5 cases involve In-memory cache and Database. 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 cause4