Incident Library

IL-0383 PagerDuty · 2014-06-03database

PagerDuty's shared Cassandra cluster degraded during a repair, delaying notifications and losing incoming events

PagerDuty's notification pipeline relies on the Cassandra datastore. On 3 June 2014 the background repair process, which keeps stored data consistent across the cluster and puts heavy strain on Cassandra, started normally on one node. Together with other high load at the time, the repair put the cluster into a heavily degraded state. The team reduced the load and stopped the repair, which helped only for a while: the cluster swung between stability and instability for six hours until the team cut communication between some of the nodes and normal operation came back.

On 4 June the team restarted the postponed repair by hand after turning off a substantial amount of optional load. The repair eventually brought the outage back, this time more damaging. Repeating the previous day's steps and several other attempts did not stabilise the pipeline, so the team carried out a "factory reset" that deleted all in-flight data in the notification pipeline. Cassandra recovered at once and service was restored gradually, although some downstream systems needed manual work to become consistent with the empty pipeline. The root cause analysis was still going on when PagerDuty wrote the post, but PagerDuty knew the cluster was underscaled and shared by too many services with different load and usage patterns. PagerDuty had noticed similar issues recently and planned fixes, but had put the Cassandra version upgrade ahead of the vertical and horizontal scaling and ran out of time; after 4 June the vertical scaling was completed and the split of the Cassandra clusters by workload was partly done.

Severity
sev1
Scope
PagerDuty notification pipeline and integration API: on 3 June about 3% of events not received and a fraction of 1% of notifications delayed; on 4 June 14.9% of events not received, 27.5% of notifications not delivered and 60.9% delayed more than 5 minutes
Users affected
PagerDuty customers
Region
–
Time to detect
–
Time to resolve
–

Symptoms

On 3 June 2014, PagerDuty's notification pipeline performed poorly and some notifications were delayed after the Cassandra cluster behind it became heavily degraded. About 3% of events sent to the integration API could not be received.

Reducing the load and stopping the Cassandra repair helped for a while, but the cluster then swung between stable and unstable periods for six hours until communication between some of the nodes was cut. A small number of notifications, a fraction of 1%, were delivered late that day.

On 4 June, after the postponed repair was restarted by hand, the outage came back and was much worse: 14.9% of events sent to the integrations API could not be received, 27.5% of notifications were never delivered and 60.9% of notifications were delayed by more than 5 minutes. Repeating the steps that had stabilised Cassandra the day before did not work this time, and several further attempts to stabilise the pipeline failed as well.

Symptom Database overloadHigh error rateHigh latency

Root cause

Trigger
On 3 June 2014 the Cassandra background repair process started its normal run on one node of the cluster while other high load was on the cluster; on 4 June the team restarted the postponed repair by hand.

Detection

–

Remediation

Action items

Lessons

PagerDuty concluded that its Cassandra cluster was underscaled and shared by too many services with different load and usage patterns, and that the scaling work should have come before the planned Cassandra version upgrade.

Sources

Related cases

Check your cluster for this

kubegap audits a Kubernetes cluster for conditions like the ones in this case, Database 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.