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

Cases4 cases

1 to 4 of 4

  1. Symptoms

    From 1 May 2026, some QStash schedules in the US region behaved wrongly: changes to schedules did not take effect, paused or deleted schedules came back, and newly created schedules did not run as expected. Some scheduled jobs were also executed twice.

    Trigger

    On 1 May 2026 a bug made QStash in the US region send traffic back to the legacy scheduling path, which had been left in the codebase as a fallback after the move to the new scheduling infrastructure.

    Root cause
    Component
    Contributing factor
    Remediation
    • Made the new scheduling system the active source of truth again
    • Reconciled the data between the legacy and new scheduling systems
    • Wrote the missing schedule changes back into the new infrastructure
    • Resolved conflicts to keep user data and schedule continuity
    • Restored some previously paused or deleted schedules to avoid permanent data loss
    Action items
    • Remove obsolete fallback execution paths once a transition is complete
    • Add automated safeguards and alerts for unexpected fallback behaviour
    • Improve consistency validation between the systems
    • Expand rollback and reconciliation testing
  2. Symptoms

    At 10:42 UTC on 11 April 2022, the API for publishing messages to Pusher Channels on the mt1 cluster became largely unavailable, and from about 10:44 requests to the MT1 API returned more errors.

    Trigger

    An engineer restarted the master node of an mt1 Redis group to apply a larger replication buffer, after restarting both replicas of that group.

    Root cause
    Component
    Contributing factor
    Detection

    Pusher saw error rates rise for requests to the MT1 API from about 10:44 UTC.

    Action items
    • Fix the Redis shutdown script to check that failover has completed and the node is no longer a master before terminating
  3. Symptoms

    On Thursday 24 January 2013 GitHub's exception tracking and monitoring systems detected a large spike in exceptions. Most of them were timeouts in code search queries and in the background jobs that update the code search indexes with data from new pushes, and the outage of the newly launched Code Search lasted into Friday 25 January.

    Trigger

    On 17 January GitHub upgraded the code search cluster from Elasticsearch 0.19.9 to 0.20.2 before launching Code Search publicly; the outage began on 24 January, after the public launch.

    Root cause
    Component
    Contributing factor
    Detection

    GitHub's exception tracking and monitoring systems detected a large spike in exceptions, mostly timeouts from code search queries and from the indexing background jobs.

    Remediation
    • Stopped the whole cluster and brought it back in maintenance mode, with shard allocation and rebalancing disabled
    • Brought in engineers from elasticsearch, the company, to review the cluster and its unallocatable shards
    • Upgraded Java and Elasticsearch and applied the recommended configuration through a Puppet topic branch and environment
    Action items
    • Provision a staging environment for the code search cluster to test infrastructure changes
    • Have the elasticsearch team audit the code search cluster configuration again in future
    Lessons

    The Elasticsearch upgrade was not tested enough on GitHub's infrastructure before it reached the code search cluster, partly because the cluster had no proper staging environment. For large clusters the elasticsearch team recommended equal minimum and maximum JVM heap through ES_HEAP_SIZE, at 50% of system RAM, starting recovery immediately instead of after recover_after_time, and configuring minimum_master_nodes so that paused nodes do not form their own clusters.

  4. Symptoms

    On Monday, September 10th, 2012, during a schema migration, the health checks on GitHub's MySQL master failed and Percona Replication Manager moved the 'active' role to another node of the new three-node cluster. That node's InnoDB buffer pool was cold and it performed poorly, its health checks failed in turn, and the role failed back to the original server. GitHub.com went down.

    Trigger

    A schema migration on Monday, September 10th put more load on the master database than earlier migrations had, and Percona Replication Manager's health checks on the master failed.

    Root cause
    Component
    Contributing factor
    Detection

    On the morning of September 11th, a developer told the operations team that the 'standby' node was returning incorrect query results.

    Remediation
    • Enabled Pacemaker's maintenance-mode so no health checks or automatic failovers ran, and let the buffer pool warm
    • Powered off the out-of-date node 'c' to end the partition
    • Stopped Pacemaker and Heartbeat on nodes 'a' and 'b' and started them on node 'a' only
    • Started MySQL on node 'a' in the active role
    • Removed the events leaked to wrong dashboards and audited the wrongly routed repositories
    • Contacted the owners of the exposed private repositories
    Action items
    • Change the Pacemaker configuration so the active database role fails over only when an operations engineer starts it
    • Find a way to warm the InnoDB buffer pool of slave databases so failovers do not hurt performance
    • Audit the Pacemaker and Heartbeat stack, focusing on the code path behind the segfault
    • Run hardware tests on the server where the segfault happened
    Lessons

    GitHub concluded that automated failover is not the right strategy for its primary production database: for every failover in this incident, any member of the operations team would have said it should not happen. Failovers that must happen, in an emergency or during maintenance, should not hurt performance.

Check your cluster for this

These 4 cases involve Database failover manager and In-memory cache. 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