Incident Library

IL-0374 DigitalOcean · 2024-08-05database

DigitalOcean creates and management actions failed globally when its service discovery datastore lost quorum

DigitalOcean was adding a new datacenter to the datastore that powers its internal service discovery. The replication configuration deployed for it named the new datacenter, which held zero keys, as the owner of 100% of the keys in the datastore. The configuration propagated globally at once, the datastore nodes lost quorum in every region, and clients could no longer read from or write to the datastore, which cascaded to every service that finds its dependencies through service discovery.

Engineers identified the lack of quorum and datastore ownership as the blocking issue at 16:42 UTC and the replication change as its cause at 17:00 UTC, then reverted the configuration at 17:16 UTC and ran it against the region that had become the datastore owner. Some regions picked up the corrected configuration and recovered. For the regions that had not, engineers applied the configuration directly on the nodes from 18:25 UTC and ran local repairs on the data to make sure it was aligned before moving on to the next region. After failed events were cleaned up and pending events that had not yet timed out were processed, the platform stabilised at 19:10 UTC. The replication configuration deployment had taken place outside a normal maintenance window.

Severity
–
Scope
Creates, event processing and management through the Cloud Control Panel and the API for Droplets, networking, login and authentication, Block Storage snapshots, Spaces and CDN, Managed Kubernetes and Managed Databases; existing resources stayed available
Users affected
–
Region
Global
Time to detect
5m
Time to resolve
2h 40m

Symptoms

From 16:30 UTC on 5 August 2024, DigitalOcean's internal services could not discover the other services they depended on. Creates, event processing and the management of DigitalOcean products failed in all regions through the Cloud Control Panel and the API, while existing customer resources such as Droplets stayed online.

The first visible effect was a complete disruption of reads and writes to the datastore behind internal service discovery, whose nodes lost quorum in every region. Droplet creates and updates, network creates, login and authentication, Block Storage volume snapshot creation, Spaces and CDN creates, Spaces updates, Managed Kubernetes cluster creates and Managed Databases creates failed. Other services also rely on service discovery to talk to each other, so customers may have seen further impact when managing them through the Cloud Control Panel or the API.

Events failed with a distinct timeout at first. After the replication configuration was reverted at 17:16 UTC, some events failed faster, and the error changed from a timeout to a failure to find endpoints. Some regions took longer to pick up the reverted configuration and kept failing until engineers applied it on their nodes by hand.

Symptom Service outageCluster or node provisioning stall

Root cause

Trigger
During the rollout of a new datastore cluster in a new datacenter, a replication configuration was deployed against the datastore behind internal service discovery that gave the new datacenter, which held zero keys, 100% ownership of all keys.

Detection

Service discovery unavailability was first reported internally at 16:35 UTC, five minutes after the rollout of the new datastore cluster began.

Remediation

Action items

Lessons

–

Sources

Related cases

Check your cluster for this

kubegap audits a Kubernetes cluster for conditions like the ones in this case, Coordination and key-value store, Service discovery, Database replication among them, read-only, from Claude Code or Codex. Its checks cite public reports like this one.

For AI tools and scripts

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.