Cases1 case
1 to 1 of 1
IL-0274GitHub's code search Elasticsearch cluster hit near-100% CPU and rapid master elections; a restart found lost shardsGitHub2013- 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.
This case involves Elasticsearch or OpenSearch and Language runtime settings. 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
Software defect1 case
- Contributing factor
- Organisation