Incident Library

IL-0309 Preset · 2026-04-13databaseaws

Preset's RDS PostgreSQL 14.7 to 17.9 upgrade in US East 1 ran out of storage and took Superset down for six hours

Preset planned to upgrade every RDS PostgreSQL instance in production US East 1 from 14.7 to 17.9. The API Gateway and Examples instances finished by 04:18 EDT, but the primary database instance went through 38 minutes of pre-upgrade checks and then a pre-upgrade snapshot that ran for about 4.5 hours. Before a major version upgrade, RDS takes a full, non-incremental snapshot regardless of any snapshots that already exist, while the daily automated snapshots of this instance are incremental, which is why they had always been quick. Preset states that S3 snapshot throughput is an AWS-side limit of about 30–45MB/s regardless of the EBS volume's provisioned throughput, so a full snapshot of 440GB at about 40MB/s takes at least about 3 hours, and that this limit only shows during full snapshots, which are rare in normal operation.

The volume was 500GB, with about 440GB used and about 64GB free at the start. During the long snapshot the remaining ~60GB of free storage was taken by the snapshot's temporary files and metadata, by pg_upgrade working files and output logs, and by WAL that accumulated while the snapshot ran. When free storage reached zero, the upgrade failed at 09:37 EDT. The pre-upgrade snapshot completed at 10:10, and AWS rolled the instance back automatically to its pre-upgrade state on PostgreSQL 14.15 without restoring from a snapshot. The instance restarted at 10:13 in a consistent state with no data loss and no manual intervention, and a post-rollback snapshot ran automatically until 11:29.

Severity
–
Scope
Superset was unavailable for about 6 hours for all customers on the us2a production deployment; no data was lost or corrupted
Users affected
All customers on the us2a production deployment
Region
US East 1
Time to detect
–
Time to resolve
6h

Symptoms

A planned major version upgrade of Preset's production RDS PostgreSQL instances in US East 1, from 14.7 to 17.9, ran far past its maintenance window, and all customers on the us2a deployment could not reach Superset. After more than five hours the upgrade failed with "Postgres cluster is in a state where pg_upgrade cannot be completed successfully."

The upgrade began with a ModifyDBInstance API call at 04:12 EDT. The pre-upgrade compatibility checks on the primary instance took 38 minutes, and at 04:51 the instance shut down and a snapshot started. At 05:28 the snapshot showed sequential reads at about 45MB/s with writes near zero. At 08:00 I/O throughput rose to about 55MB/s and CPU jumped to about 70%, which looked like a change of phase, and at 09:22 reads fell to near zero while writes rose to 130MB/s, which looked like the instance recovering. At 09:37 RDS reported the upgrade as failed.

Nothing before the window pointed to a long snapshot. The same upgrade had finished in under 15 minutes on sandbox, staging and several other production regions, and the daily automated snapshots of this instance always took 10–15 minutes. An AWS support ticket opened at 07:26 got the reply at 08:36 that the upgrade was progressing normally, that no intervention was possible and that there was no ETA.

Symptom Service outageUpgrade stall

Root cause

Trigger
A planned major version upgrade of all RDS instances in production US East 1 from PostgreSQL 14.7 to 17.9, started with a ModifyDBInstance API call at 04:12 EDT.

Detection

The planned upgrade was being watched as it ran: the snapshot's I/O was observed at 05:28 EDT, the incident was posted on the status page at 06:00 EDT and an AWS support ticket was opened at 07:26 EDT.

Remediation

Action items

Lessons

Preset learned that RDS takes a full, non-incremental snapshot before a major version upgrade, so the duration of the daily incremental snapshots and of the upgrades in other regions said nothing about how long the pre-upgrade snapshot would take on this instance. The S3 snapshot throughput limit of about 30–45MB/s only becomes visible during such full snapshots, which are rare in normal operation.

Sources

Related cases

Check your cluster for this

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