Graph
Cases5 cases
1 to 5 of 5
IL-0262Requests through one GitHub datacenter failed or slowed after its load balancer nodes ran out of network flowsGitHub2026- Symptoms
On 17 August 2026 from 13:40 UTC, GitHub issues and pull requests returned errors and slow responses on their pages and in the API. Automated monitoring detected the raised errors, and many other services that route through the same datacenter's load balancers, including the REST and GraphQL APIs, Actions, Copilot, sign-in and authentication, and the webhooks API, also showed errors and latency.
- Trigger
A new peak in traffic pushed the load balancers of one GitHub datacenter past their limits.
- Root cause
- Component
- Contributing factor
- Detection
Automated monitoring detected the elevated errors and an incident was opened; the affected products were marked degraded on the public status page.
- Remediation
- Shifted some traffic to another datacenter
- Reduced gateway retries to relieve the pressure on the load balancers
- Stopped the load-balancer processes on the saturated nodes
- Blocked the retry-triggering requests to the most affected internal endpoint
- Ramped traffic back up gradually to stabilise the remaining authentication errors
- Action items
- Correct autoscaling policies so they account for service-mesh sidecar concurrency and capacity, not just the host service
- Audit request, concurrency and scaling limits for the service mesh across the affected services
- Review retry and backoff limits across gateways and clients
- Fix the client retry behavior that amplified authentication traffic
- Improve load-balancer capacity monitoring
- Strengthen regional failover safeguards
- Lessons
GitHub named the core weakness as the service-mesh sidecar that did not scale up, together with its retry behavior, and clients that were not bound enough to keep a partial degradation from amplifying into a broader overload.
IL-0471GitHub Actions runs failed or sat queued for 9 hours after a routine deployment's pod replacement saturated capacityGitHub2026- Symptoms
From 15:05 UTC on 6 August 2026 GitHub Actions workflow runs failed to start, failed partway through or stayed queued for a long time, on both GitHub-hosted and self-hosted runners. Some requests to the Actions REST API returned errors, and some customers saw unexpected rate limiting in their workflows.
- Trigger
A routine deployment to an internal Actions service that processes events and generates Actions jobs replaced pods, and the remaining capacity became saturated.
- Root cause
- Component
- Contributing factor
- Remediation
- Expanded capacity of the affected services
- Throttled incoming webhook-triggered work
- Increased processing capacity for the backlog of affected events
- Deployed changes that stopped runners from repeatedly trying to acquire invalid jobs
- Deployed a fix for self-hosted runners that were not picking up jobs and enabled it incrementally
- Paused migrations with GitHub Enterprise Importer
- Restored webhook-triggered Actions workflows to full throughput
- Rolled back the mitigation that left some ARC runners offline, and recovered those runners by hand
- Shared CLI and UI steps for customers to clear jobs that could not be retried or canceled
- Action items
- Improve deployment and capacity safeguards for the affected services
- Strengthen monitoring for the conditions that preceded the incident
- Improve the resiliency and recovery of queued work and runner assignment
- Add automatic recovery for self-hosted runners in upcoming Runner and ARC releases
- Reduce the risk of cascading failures and speed up recovery during large Actions disruptions
IL-0210GitHub's MySQL clusters failed over to the US West Coast and the site served slow, stale, inconsistent data for 24 hoursGitHub2018- Symptoms
At 22:54 UTC on 21 October 2018 GitHub's internal monitoring started alerting on many faults at once. By 23:02 UTC the first responders saw that the replication topologies of many MySQL clusters were in an unexpected state: the Orchestrator API showed topologies made only of servers in the US West Coast data center. When connectivity came back, the application tier had immediately started sending writes to the new West Coast primaries.
- Trigger
At 22:52 UTC on 21 October, routine maintenance to replace failing 100G optical equipment cut connectivity between GitHub's US East Coast network hub and its primary US East Coast data center for 43 seconds.
- Root cause
- Component
- Contributing factor
- Detection
GitHub's internal monitoring raised alerts on numerous faults at 22:54 UTC, two minutes after the partition. By 23:02 UTC the first responders had found, by querying the Orchestrator API, that many database clusters had a topology with only US West Coast servers.
- Remediation
- Locked the internal deployment tooling to stop further changes
- Paused webhook delivery and GitHub Pages builds to stop jobs writing metadata
- Restored the affected MySQL clusters from backups into the US East Coast data center and let them replicate from the West Coast
- Found ways to restore directly from the West Coast to get around the throughput limits of downloading from off-site storage
- Moved all database primaries back to the US East Coast data center
- Spread read traffic over additional MySQL read replicas in the US East Coast public cloud so replication could catch up
- Failed over to the original topology once the replicas were in sync
- Processed the backlog of webhook events and Pages builds, pausing to raise an internal TTL after about 200,000 webhook payloads were dropped
- Action items
- Reconcile the writes from the captured MySQL binary logs that were not replicated, automatically where possible and with user outreach otherwise
- Make sure status updates can be published even when GitHub Pages builds are paused
- Give more accurate public estimates of the time to repair
- Configure Orchestrator so it cannot promote database primaries across regional boundaries
- Move to a status reporting mechanism that shows the status of each component of the platform
- Serve GitHub traffic from multiple data centers in an active/active/active design with N+1 redundancy at the facility level
- Test assumptions about the system more proactively
- Validate failure scenarios systematically, with investment in fault injection and chaos engineering tooling
- Lessons
Orchestrator did what it was configured to do, but the application tier could not work with primaries on the other side of the country: leader election within one region is generally safe, while the sudden cross-country latency was a major contributing factor. The behaviour emerged from a partition larger than any GitHub had seen. Replication caught up along a power decay curve, not a straight line, so the linear estimates of recovery time were wrong. GitHub concluded that tighter operational controls and faster response are not enough on their own and that failure scenarios have to be validated before they happen.
IL-0263GitHub was slow and erroring all day and down for 18 minutes as links between access and aggregation switches saturatedGitHub2012- Symptoms
On Friday, 30 November 2012, GitHub had sporadic bursts of slow responses and intermittent errors for the whole day and was completely unavailable for 18 minutes. One fileserver pair was offline for a large part of the day, which affected a small percentage of repositories; this was a side effect of the network problems on the high-availability clustering between the fileserver nodes.
- Trigger
On the morning of 30 November GitHub moved the A switches in its server cabinets onto the new aggregation switches, the second half of a migration whose B-switch half had been done the day before.
- Root cause
- Component
- Contributing factor
- Detection
Engineers saw the problems during the maintenance itself: connectivity to the B switch was lost as the last A switch was connected, and afterwards performance stayed low and the links between access and aggregation switches showed as completely saturated.
- Remediation
- Fixed the bridge-loop problem and returned the affected B switch to service
- Removed the partial link failure detection setting from the access switches
- Escalated to the network vendor, which raised the case to its highest severity level
- Restarted core processes on the aggregation switches in a Saturday 0600 Pacific maintenance window so they learned MAC addresses again
- Action items
- Deploy the vendor's software update that fixes the MAC learning issue to the switches
- Closely monitor aggregation-to-access capacity and keep a workaround process ready if the problem returns
- Build a duplicate of the network stack, from the routers through the access switches, as a staging environment for testing such changes
- Add automated network monitoring that alerts sooner on similar issues
- Run scheduled incident response exercises with scenarios that counter tunnel vision
- Contact the network vendor's support at the first sign of trouble in the network
- Lessons
GitHub had designed the maintenance to have no impact on customers and clearly failed, so it plans to invest in a staging copy of its network to test such changes and catch bugs like this one. During the response the team fixated for a long time on a bridge loop, which kept it from considering other causes. GitHub had a very positive experience with the vendor's support staff, so it will contact that support team at the first sign of network trouble.
IL-0303GitHub's MySQL master failed over to a node with a cold buffer pool during a schema migration and GitHub.com went downGitHub2012- 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.
These 5 cases involve Database and Database replication. 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 cause3
Capacity exhaustion2 cases
- Contributing factor
- Organisation
DNS or network fault1 case
- Component
- Contributing factor
- Organisation
Software defect2 cases
- Component
- Contributing factor
- Organisation