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

Cases13 cases

1 to 5 of 13

  1. Symptoms

    At 16:39 EDT on 23 October 2025, Hightouch triggered a failover of its Aurora PostgreSQL cluster in us-east-1 to a newly upsized reader. The AWS Console showed the usual parameter adjustments and instance restarts, but after the page refreshed the original writer was still the primary, and backend services could not run write queries although AWS showed the cluster as healthy.

    Trigger

    A planned upsize of the Aurora cluster's instances, done without a maintenance window, after the AWS us-east-1 outage of 20 October had left an event backlog that strained the small Postgres instance. The manual failover to the upsized reader at 16:39 EDT started the failure.

    Root cause
    Component
    Contributing factor
    Detection

    The AWS Console showed after a refresh that the original writer was still primary, and backend application logs showed write errors on a read-only transaction. Per-instance query monitoring in Datadog and the RDS database logs showed the brief writer advertisement.

    Remediation
    • Restarted the backend services, which cleared the write errors after each failed failover
    • Scaled down every service that writes to the database
    • Triggered the failover again with no concurrent writes, which completed, and upsized the cluster in us-east-1
    Action items
    • Pause writers before any intentional failover, as written into the internal playbooks
    • Monitor for unexpected flips of the instance that advertises the writer role
    Lessons

    Hightouch's takeaways are that a migration can end in the desired state, the starting state or somewhere in between even with services one trusts, so traffic redirection and brief dependency outages should be planned for. The brief writer advertisement could only be found because queries to each instance were monitored in Datadog and the RDS database logs were available. Limiting how much any single component can affect the system helps both uptime and maintenance, and a staging load test, even of the exact procedure, did not reproduce the conditions that triggered the Aurora race condition.

  2. Symptoms

    From 10:32 UTC on 6 August 2024, Wasabi's S3 service and user services failed in every region: users had trouble logging into the Web Console and requests to Wasabi regions returned errors.

    Trigger

    At 10:32 UTC on 6 August, Wasabi's queueing service reached full capacity, and that made the database cache unresponsive.

    Root cause
    Component
    Contributing factor
    –
    Remediation
    • Restarted the primary database to clear stale connections and cleared the queueing service's queue at the same time, which did not fully restore the database
    • Promoted the secondary database instance to primary, after which S3 was fully operational at 11:20 UTC
    • Restarted the database again between 13:17 and 13:23 UTC to fully incorporate the queueing service library
    • Promoted the original primary database back to production on 7 August, which stopped the user service timeouts
    • Recreated and redeployed the automation cluster that the automation service could not see, which fully restored S3
  3. Symptoms

    From 21:40 UTC on 18 July 2024, virtual machines in the Azure Central US region lost access to their disks, and the services running on those VMs failed. Azure SQL Database and SQL Managed Instance showed unhealthy nodes and login failures, Cosmos DB requests failed, and service management operations failed across many Azure services.

    Trigger

    Routine changes to the VM host fleet led to a new allow list of VM host address ranges being generated and published to all Storage scale units in Central US. Recent network configuration changes had made some of the infrastructure file servers that hold the source data unreachable from the server generating the list, so the published list was incomplete.

    Root cause
    Component
    Contributing factor
    Detection

    Service monitoring detected the drop in VM availability at 22:06 UTC while the allow list update was being published. SQL monitoring detected unhealthy nodes and login failures within one minute of SQL becoming unavailable, and monitoring flagged the availability drop for Cosmos DB, SQL DB and SQL DB Managed Instance at 22:14 UTC.

    Remediation
    • Halted the allow list update workflow worldwide
    • Paused all deployments in the Central US region
    • Paused compute buildout deployments in all regions
    • Updated the configuration of all Storage scale units in Central US, restoring storage availability by 02:55 UTC
    • Started geo-failovers for SQL databases with automatic failover policies
    • Restarted SQL gateway nodes to refresh their caches and route connections to the right nodes
    • Forced completion of SQL failovers that had not completed
    • Failed over the Cosmos DB control plane and active-passive accounts with a write region in Central US
    • Cancelled customer-triggered graceful switch region operations that blocked Cosmos DB failovers
    • Removed locks on Cosmos DB service metadata to force-complete stuck failovers
    • Repaired impacted Cosmos DB partitions for single-region accounts
    • Repaired backend nodes and failed Cosmos DB accounts back to Central US, redoing failback where it failed
    Action items
    • Make the allow list generation workflow detect incomplete source information and halt
    • Alert on storage requests rejected by allow list checks
    • Deploy allow lists one Availability Zone and storage type at a time, over 24 hours
    • Add VM health checks and an automatic stop to the allow list deployment workflow
    • Reevaluate the policy for Microsoft-managed failover of SQL failover groups
    • Fix the Cosmos DB failback workflow that broke some MongoDB drivers for MongoDB API accounts
    • Fix Cosmos DB failback for accounts with private endpoints so it does not need redoing
    • Make the storage data-plane firewall reject invalid allow lists and keep the last-known-good state
    • Improve Azure NetApp Files monitors so impacting events are detected and classified in time
    • Monitor more Azure NetApp Files service metrics to correlate similar events faster
    • Make the SQL Service Fabric cluster location change notifications reliable under load
    • Make SQL geo-failover workflows more robust so they complete
    • Remove the issues that delayed 5% of Cosmos DB failovers
    • Migrate Azure DevOps customer metadata to the right geography
    • Decouple Azure NetApp Files regional reads and writes to keep this class of issue to one region
    • Evaluate caching to reduce Azure NetApp Files reliance on stored utilization data
    • Add automatic per-partition failover for Cosmos DB multi-region active-passive accounts
    • Build the Resilient Ephemeral OS disk improvement so VMs survive storage incidents better
  4. Symptoms

    On March 16, 2022 at 14:09 UTC, write operations across GitHub stopped working, including git operations, webhooks, pull requests, API requests, issues, GitHub Packages, GitHub Codespaces, GitHub Actions and GitHub Pages. Under peak-hour load, the database proxy in front of the shared mysql1 MySQL database had reached its maximum number of connections.

    Trigger

    Increased load on mysql1 during peak hours, combined with poor query performance in specific circumstances, pushed the database proxy to its maximum number of connections.

    Root cause
    Component
    Contributing factor
    Remediation
    • Failed over mysql1 to a healthy replica on March 16
    • Reset the application connections to the new primary on March 17
    • Added an index that fixed the main query performance problem
    • Performed a primary failover on March 22
    • Performed a primary failover on March 23
    • Throttled webhook traffic to reduce load
    Action items
    • Keep throttling webhook traffic at peak load times
    • Audit the load patterns of mysql1 during peak hours and make performance fixes based on the audits
    • Move traffic to other databases to reduce load and speed up failover
    • Review change management, particularly monitoring and changes during high load in production
    • Shard the databases and scale up hardware
  5. Symptoms

    On 10 July 2019 the Stripe API failed a substantial majority of requests twice, from 16:35 to 17:02 UTC and from 21:14 to 22:47 UTC. In the first period automated monitoring detected within a minute that a database cluster had failed to elect a new primary.

    Trigger

    The primary node of a database cluster failed at 16:35 UTC while one shard had several stalled nodes. The second period was set off by rolling the election protocol back to the previous minor version at 20:42 UTC.

    Root cause
    Component
    Contributing factor
    Detection

    Automated monitoring detected the failed election within a minute, and the team was alerted at 16:36 UTC. The second period was announced at 21:14 UTC by automated alerts that some shards in the cluster were unavailable.

    Remediation
    • Restarted all nodes of the database cluster, which forced a successful primary election
    • Updated the production configuration and restarted the database cluster's nodes
    • Ramped traffic back up, putting services for user-initiated API requests first
    Action items
    • Alert when nodes stop reporting their replication lag
    • Alert when a shard enters a state that could trigger the election fault
    • Work with the database maintainers on a fix for the underlying fault
    • Add circuit breaking on failed operations to particular database clusters
    • Use fault isolation to contain the impact of a single failed shard
    • Limit the resources used by clients that keep retrying failed requests
    • Add procedures and tooling that make rapid configuration changes during incident response safer
Check your cluster for this

These 13 cases involve Database and Database failover manager. 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 cause7

Software defect4 cases

  1. IL-0310 An Aurora PostgreSQL failover to an upsized reader reversed twice and backend writes failed in read-only transactions
  2. IL-0241 A database shard could not elect a new primary, and the Stripe API failed most requests in two periods on one day
    Stripe2019
  3. IL-0388 A Google Cloud live migration took a Discord Redis primary offline, and the failover broke API instances and then guilds
  4. IL-0303 GitHub's MySQL master failed over to a node with a cold buffer pool during a schema migration and GitHub.com went down
    GitHub2012

Capacity exhaustion3 cases

  1. IL-0544 Wasabi's database cache stopped responding when its queueing service filled up, and S3 failed in all regions
    Wasabi2024
  2. IL-0302 Peak load on GitHub's mysql1 MySQL cluster maxed out its database proxy's connections and stopped writes in March 2022
    GitHub2022
  3. IL-0320 Postmark's primary MySQL disk filled but MySQL kept running, so MySQL-MMM never failed over and sending was delayed

Configuration change1 case

Organisation
  1. IL-0367 Azure Storage in Central US rejected VM disk I/O, taking down VMs and the SQL Database and Cosmos DB services on them

Hardware failure2 cases

  1. IL-0289 A failing SSD made updown.io's primary MongoDB about 200 times slower, no failover happened and the site went down
  2. IL-0219 GoCardless's API and Dashboard failed every request for 1 hour 50 minutes when Pacemaker did not promote a replica

DNS or network fault1 case

Organisation
  1. IL-0210 GitHub's MySQL clusters failed over to the US West Coast and the site served slow, stale, inconsistent data for 24 hours
    GitHub2018

unknown1 case

Component
Contributing factor
Organisation
  1. IL-0335 A bugcheck in the primary SQL Server put the Stack Exchange network into read-only mode and then offline for 12 minutes

Operator error1 case

  1. IL-0337 EBS volumes in one US East Availability Zone got stuck after a network change cut EBS nodes off from their replicas