IL-0395 Google Cloud · 2017-04-05gcpnetworking
Google Cloud HTTP(S) Load Balancer gave 502s on 25% of requests for 22 minutes after reverting to a stale configuration
A master server controls the process that pushes configuration to the Google Cloud HTTP(S) Load Balancers. When mastership changes, the new master starts its next push by testing the configuration on a subset of load balancers; if the test passes the configuration goes to all load balancers globally, and if it fails the master reverts all load balancers to the last "known good" configuration. On 5 April 2017 one master replica lost access to Google's distributed file system, could not read recent configuration files, and then took over mastership. Its test of the latest configuration failed, so it reverted every HTTP(S) Load Balancer to the newest configuration it could read, which was far out of date. Google describes this as a bug in the configuration update process.
The stale configuration deleted many configurations on the Google Frontend servers, which started garbage collection to free their memory. The garbage collection took so much CPU that the servers failed health checks and were restarted, and requests served by those servers got 502 errors. Engineers were paged at 01:22 PDT and at 01:34 switched the configuration update process to a different master server, which ended the errors for most services within one minute. Configuration updates to the HTTP(S) Load Balancer then stayed paused until 05:16 while the root cause was confirmed, which made App Engine Flexible deployments fail in that window.
- Severity
- –
- Scope
- Google Cloud HTTP(S) Load Balancer: 25% of requests failed with 502 for 22 minutes, 100% on some recently modified load balancers; App Engine Flexible deployments failed during the 3 hours 41 minutes configuration pause
- Users affected
- –
- Region
- –
- Time to detect
- 9m
- Time to resolve
- 22m
Symptoms
On 5 April 2017 from 01:13 to 01:35 PDT, 25% of requests to the Google Cloud HTTP(S) Load Balancer failed, and clients received 502 errors for the failed requests. Some HTTP(S) Load Balancers that had been modified recently failed 100% of their requests.
The errors came from Google Frontend servers that were restarting. After loading a configuration from which many configurations had been deleted, the Google Frontend servers spent a large share of their CPU on garbage collection to free the memory of the deleted configurations, failed their health checks and were restarted. Every client request served by a restarting server got a 502.
After the errors ended, Google paused all configuration changes to the HTTP(S) Load Balancer for three hours and 41 minutes while engineers confirmed the root cause. During that pause, deployments of App Engine Flexible apps failed.
Symptom High error rateProbe failures
Root cause
Root cause Software defect
- Trigger
- One replica of the master servers that control the HTTP(S) Load Balancer configuration update process lost access to Google's distributed file system and could not read recent configuration files, and mastership then passed to that replica.
Detection
Google engineers were paged at 01:22 PDT, nine minutes after the errors began.
Remediation
- Switched the configuration update process to a different master server at 01:34 PDT
- Paused configuration updates to the HTTP(S) Load Balancer until 05:16 while the root cause was confirmed
Action items
- Configure master servers never to push HTTP(S) Load Balancer configurations more than a few hours old
- Make Google Frontend servers reject loading a configuration file more than a few hours old
- Improve testing of new HTTP(S) Load Balancer configurations so out-of-date configurations are flagged before reaching production
- Fix the issue that made the master server fail to read files from Google's distributed file system
- Fix the issue that made Google Frontends fail health checks during heavy garbage collection
Lessons
–
Sources
- https://status.cloud.google.com/incident/compute/17007 · official-status · archived copy
Related cases
IL-0150A latent race condition in DynamoDB's DNS automation left an empty DNS record for dynamodb.us-east-1.amazonaws.com, and the DynamoDB and EC2 launch failures that followed caused EKS, ECS and Fargate container launch failures and cluster scaling delays in us-east-1Amazon Web Services · 2025same root cause · shared Cloud load balancer
IL-0352Heroku Router 2.0 spread HTTP requests unevenly across dynos for four days, causing latency and timeoutsHeroku · 2025same root cause · shared Cloud load balancer
IL-0131A new kind of GenerateContent request made Vertex AI prediction API servers segfault, and once enough of them restarted at the same time the serving fleet could not carry the loadGoogle Cloud · 2024same root cause · shared Cloud load balancer
IL-0529New Google Cloud VMs and other instances came up without network connectivity in all zones after VPC controllers stoppedGoogle Cloud · 2024same root cause · shared Cloud load balancer
IL-0253Firefox froze and could not load any web content for close to two hours, stuck in an HTTP/3 request to TelemetryMozilla · 2022same root cause · shared Cloud load balancer
IL-0243Google's global External Proxy Load Balancing returned 404 errors for most HTTP/S endpoints for 33 minutesGoogle Cloud · 2021same root cause · shared Cloud load balancer
IL-0106A malformed Traefik IngressRoute triggered a Traefik v2 bug once a node rollover restarted every Traefik pod, and all Kubernetes services returned 404DFDS · 2021same root cause · shared Cloud load balancer
IL-0493Netlify's Google Cloud TCP load balancer stopped serving about 5% of global traffic as all backends failed health checksNetlify · 2021same root cause · shared Cloud load balancer
IL-0345Many Render services in the Oregon region returned 503 errors for about four hoursRender · 2020same root cause · shared Cloud load balancer
IL-0030Most nodes of a cluster went NotReady together for 15 minutes while the API server sat behind an AWS ELBZalando · 2019same root cause · shared Cloud load balancer
IL-0338Google Cloud HTTP(S) and TCP/SSL Proxy load balancers returned 502s or reset connections on 33% to 87% of requestsGoogle Cloud · 2018same root cause · shared Cloud load balancer
IL-0396New or live-migrated GCE instances, VPN tunnels and network load balancers were unreachable on public IPs for over 2hGoogle Cloud · 2017same root cause · shared Cloud load balancer
Check your cluster for this
For AI tools and scripts
- This case as JSON: https://incidentlib-api.benchlet.com/cases/IL-0395
- The cases most like it: https://incidentlib-api.benchlet.com/cases/IL-0395/similar
- MCP server (Streamable HTTP, no key):
https://incidentlib-mcp.benchlet.com/mcp
The API needs no key. The MCP server offers search_incidents, get_incident, list_incidents, get_topic and vocab; both are explained on API and MCP.