Skip to main content
gcpdown
criticalCloud NetworkingGlobal

The April 2016 Google Compute Engine Outage: A Config-Propagation Race

GCPDown Research · Incident analysisPublished April 14, 2016Updated June 20, 20268 min read
Red network cables plugged into a switch

Timeline

  1. Impact begins

    While removing a single unused IP block from Google Compute Engine, the network configuration management system propagates a configuration that withdraws the IP blocks for the entire GCE network. External connectivity to GCE instances drops in every region simultaneously.

  2. Investigating

    Google's monitoring detects the global loss of GCE external connectivity within seconds. Engineers begin investigating and quickly rule out individual regions or products as the cause, pointing at the network configuration layer.

  3. Identified

    The cause is identified as the withdrawn IP configuration, compounded by a bug in the canary step meant to catch exactly this kind of invalid config before it went live. Engineers move to revert to the last-known-good network configuration.

  4. Mitigating

    The previous, correct network configuration is restored and begins propagating back across the fleet. GCE instances start regaining external connectivity as routes are re-advertised.

  5. Resolved

    External connectivity to Google Compute Engine is fully restored globally, roughly 18 minutes after impact began. Google publishes a detailed post-incident report.

Root cause

This outage is a textbook case of a control-plane race in network configuration. Google's network configuration management system is what tells the world how to reach Google Compute Engine instances - which IP blocks to advertise, and how to route traffic to them. On April 11, 2016, a routine change was underway: an unused IP block was being removed from GCE. That is a small, safe-sounding operation.

The problem was timing. A second event overlapped with the removal, and the interaction between the two produced a configuration that did not withdraw one unused block - it withdrew the IP blocks for the entire GCE network. When that configuration propagated, GCE simply stopped being reachable from the internet. Instances were running fine, disks were intact, the compute layer was healthy - but the routes that let the outside world find them had been pulled.

The single most instructive detail is the second bug. Google runs a canary step whose entire job is to detect an invalid network configuration and pause its rollout before it reaches production. That safety check should have caught a configuration that removed all of GCE's routing. It did not, because the canary itself contained a separate, latent defect that let the bad config through. The outage was not one failure but two: a config that was wrong, and a guard that was supposed to stop it but was also broken. That is the recurring pattern behind the worst control-plane events - the safety mechanism fails at the same moment the thing it guards does.

Business impact

For roughly 18 minutes, every GCE customer in every region lost external connectivity at once. Anything that depended on reaching a GCE instance from the internet - public web services, APIs, inbound integrations - went dark simultaneously. Internal, instance-to-instance traffic that did not traverse the withdrawn routes fared better, but from an end-user's perspective, services hosted on GCE were unreachable worldwide.

Eighteen minutes is short, and Google's monitoring caught the event within seconds, which is why recovery was fast. But the shape matters more than the duration: this was a global, total connectivity loss triggered by a routine change, exactly the class of event a multi-region setup does not protect you from. A workload spread across three GCE regions had all three go dark together. To see how a short-but-total global event maps against monthly SLA thresholds, the GCP SLA credit calculator is a quick way to run the numbers.

There is a subtler cost that rarely shows up in the incident duration: the confidence hit. An outage caused by removing an unused IP block teaches every operator watching that even the most mundane cleanup task carries global risk. That lesson cuts both ways. Handled well, it drives investment in the guardrails that make routine changes genuinely routine. Handled poorly, it makes teams afraid to touch anything, and fear of change is its own kind of operational debt. Google's response - publishing a candid post-incident report and hardening the propagation pipeline and its canary checks - is the constructive version: treat the near-miss as free information about where your safety net has a hole, rather than as a reason to stop cleaning up unused config.

Prevention and lessons

  1. Treat network config changes as the highest-risk deploys you run. Withdrawing routes is a one-line action with a planet-sized blast radius. Staged rollout, strict validation of the generated configuration before it propagates, and instant rollback are non-negotiable - and Google hardened this pipeline directly after the incident. It is the same lesson as the November 2021 load balancer config race.
  2. Test your safety checks as rigorously as your systems. The canary that should have caught this had its own bug. A guard you never exercise against a real bad input is a guard you cannot trust. Fault-inject invalid configs regularly to prove the check still fires.
  3. Multi-region is no defense against a global control plane. All GCE regions failed together because they share one network configuration layer. Map which global systems - networking, Service Control, identity - your architecture cannot function without, using the multi-region GCP patterns.
  4. Keep an out-of-band signal and design your data plane to survive control-plane loss. Workloads that kept serving cached results and internal traffic degraded less; see the GKE high availability guide. When you file for the downtime, the GCP credit playbook covers Google's 30-day window, and Next Signal can watch provider status and evidence the impact for you.

SLA credit eligibility

Yes for GCE workloads that lost external connectivity during the window. Eighteen minutes of full external unavailability is short of a monthly SLO breach on its own, but stacked with any other downtime in the same month it can push a workload into the 10 percent Compute Engine credit tier where evidenced. Google requires notice within 30 days and caps credits at 50 percent.

Work out what your bill was owed with the independent Google Cloud SLA credit calculator, or automate breach detection with Next Signal (sponsor). For the full claim process, see the Google Cloud credit-recovery playbook.

Questions about this outage

What caused the April 11, 2016 Google Compute Engine outage?

A race in Google's network configuration management system. As a single unused IP block was being removed, the system propagated a configuration that withdrew the IP blocks for all of GCE. A canary safety check that should have caught the invalid configuration had its own bug and let it through, so every GCE region lost external connectivity for about 18 minutes until the prior configuration was restored.

How long did the April 2016 GCE outage last?

About 18 minutes globally, from roughly 19:09 to 19:27 UTC on April 11, 2016. It was short but total for external connectivity - GCE instances in every region lost their inbound and outbound internet reachability during the window.

Why did the canary check not stop the bad configuration?

Google runs a canary step that is supposed to detect an invalid network configuration and pause its rollout before it propagates. In this incident that safety check contained a separate, latent bug, so it failed to flag the withdrawn IP blocks and allowed the bad configuration through - a reminder that safety controls need testing as much as the systems they guard.

Next time, hear it from us first

Instant alerts when Google Cloud incidents are detected - services and regions included.

Get outage alerts

More post-mortems

Cloud IAM

The June 2025 Google Cloud Global Outage: How Service Control Crash-Looped

A policy update containing unintended blank fields reached a code path in Service Control - the global layer that checks quota and policy on nearly every Google Cloud API call - that had a null-pointer defect and no feature-flag protection. Service Control crash-looped globally, returning 503s across dozens of products for roughly three hours; us-central1 took longest to recover due to a retry herd.

Cloud Load Balancing

The November 2021 Google Cloud Load Balancer Outage: A Config Race Condition

A race condition in the pipeline that propagates Google Cloud Load Balancer configuration caused a corrupt configuration to be pushed globally. Requests to sites fronted by GCLB began returning 404 errors even though the backends were healthy - taking down high-profile sites for roughly two hours until the configuration was rolled back.

Google Kubernetes Engine

GKE Control-Plane Outages: When the API Server Fails but Your Pods Keep Running

GKE control-plane incidents are the classic split-brain outage: the Google-managed control plane - the Kubernetes API server, scheduler, and controller manager - becomes unreachable or unhealthy in a region, so kubectl, deployments, autoscaling, and self-healing all stall. Meanwhile the nodes and pods you already had running keep serving traffic, because the data plane runs independently of the control plane. You cannot deploy, scale, or recover from node failures until the control plane returns, but existing workloads generally stay up.