Incident Library

IL-0362 PagerDuty · 2013-04-13awsnetworking

PagerDuty could not dispatch notifications for 18 minutes when a peering point shared by two AWS regions degraded

PagerDuty ran in three datacenters, two AWS regions and one at Linode, and had spent a year rearchitecting its software to survive the loss of a whole datacenter, including a network partition, but not of two at once. The three were chosen to be physically separate with no dependency between them, yet two of them turned out to share a common peering point. On 13 April 2013 at 7:57am Pacific Time that peering point in Northern California began to degrade, and both AWS datacenters went offline, leaving PagerDuty with only the Linode datacenter.

From 8:11 the on-call engineer was paged about a node of the notification dispatch system, and by 8:18 notifications showed higher latency and error rates. At 8:35 high network latency stopped the dispatch system from reaching quorum and no notifications went out until 8:53, when quorum returned and queued notifications were processed; the events API kept accepting events. Most failed coordinator processes were restarted by hand, and the post-mortem found that a misconfiguration of the coordinator service slowed recovery. AWS reported the peering point connectivity issue ended at 9:23. The analysis also found that some systems lacked the logging needed to debug them, that there was no good view of inter-host connectivity, and that not all engineers were current on Cassandra and ZooKeeper.

Severity
sev1
Scope
Notifications were delayed and then not dispatched for 18 minutes between 8:35am and 8:53am Pacific Time; API endpoints returned 500 errors; the events API kept accepting events
Users affected
–
Region
two AWS regions sharing a peering point in Northern California
Time to detect
14m
Time to resolve
56m

Symptoms

On Saturday 13 April 2013 at 8:11am Pacific Time, PagerDuty's on-call engineer was paged about one node of the notification dispatch system, and an attempt at 8:13 to bring the node back failed. Customers saw delayed notifications and 500 errors on PagerDuty's API endpoints.

At 8:18 PagerDuty's monitoring detected failures across multiple notification providers, caused by the connectivity problem; most notifications still went through but with higher latency and error rates. A Sev-2 was declared at 8:31 and more engineers were paged. At 8:35 the notification dispatch system lost the ability to dispatch at all because it could not establish quorum under the high network latency, and a Sev-1 was declared. The events API kept accepting events throughout.

At 8:53 the dispatch system reached quorum again and began processing the queued notifications, 18 minutes after dispatch stopped. Most of the coordinator processes that had failed were restarted by hand, and a misconfiguration of the coordinator service kept PagerDuty from recovering faster.

Symptom High latencyHigh error rateIntermittent connection failures

Root cause

Trigger
At 7:57am Pacific Time, according to AWS, a peering point in Northern California began to degrade, causing connectivity problems for the two AWS regions that PagerDuty used as two of its three datacenters.

Detection

The PagerDuty on-call engineer was paged at 8:11am about an issue with one node of the notification dispatch system, and at 8:18 monitoring detected multiple-provider failures for notifications.

Remediation

Action items

Lessons

Datacenters chosen to be independent and physically separate can still share a network peering point, and a design built to survive the loss of one datacenter did not survive losing two at once.

Sources

Related cases

Check your cluster for this

kubegap audits a Kubernetes cluster for conditions like the ones in this case, Transit gateway or network interconnect, Coordination and key-value store 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.