Incident Library

IL-0334 Instapaper · 2017-02-09databaseaws

Instapaper's RDS MySQL bookmarks table hit the 2TB ext3 file size limit, inserts failed and the service went down

MySQL RDS instances created before April 2014 run on an ext3 filesystem with a 2TB file size limit; later instances use ext4 with a 6TB limit. Instapaper's first RDS instance was created in June 2013, when betaworks moved Instapaper from Softlayer to AWS with two devops contractors; any knowledge of the limit probably left with them. In March 2015, to fix performance problems during the backup window, the team created a read replica of that instance, upgraded it from MySQL v5.6.18 and cut over to it with about 5 minutes of downtime. Although created after April 2014, the replica inherited the original instance's filesystem and its 2TB limit. On February 9, 2017 the bookmarks table passed 2TB and inserts failed. Every backup was a filesystem snapshot under the same limit, and there was no disaster recovery plan for this kind of failure.

Guided by Pinterest's SRE team, Instapaper dumped the 2.5TB production database to a 5.5TB RAID-0 disk on an i2.8xlarge instance. When the dump proved far slower than estimated, the team switched to a contingency plan and, in about six hours, built a temporary production instance with limited access to archives, which went live after 31 hours of downtime. Over the weekend RDS engineers worked on two parallel paths: an Aurora read replica of the old database, finished in about 24 hours but risky because Aurora had not been tested with the Instapaper codebase, and a new MySQL RDS instance loaded without secondary indexes in 8 hours, where each of the three secondary indexes then took about 16 hours. Because the indexes were too slow, an Amazon engineer mounted an ext4 filesystem on the failed production database and copied the data across with rsync in about 8 hours, giving an ext4-backed instance with all data and indexes.

RDS engineers then set up row-based replication from the binary logs of the temporary production database to the new ext4 instance, which took about three hours to catch up on the changes made since Thursday. The new database was promoted to master and the application was deployed to point at it. Full service was restored on February 14 without losing any older articles, recent changes or articles saved after the outage.

Severity
–
Scope
Instapaper service down for 31 hours, then five days of limited access to archives until full recovery on February 14; no user articles were lost
Users affected
Instapaper users
Region
–
Time to detect
–
Time to resolve
31h

Symptoms

On Wednesday, February 9, 2017 at 12:30PM PT, inserts of new entries into the bookmarks table of Instapaper's MySQL database on Amazon RDS started to fail with an error. The bookmarks table, which stores the articles Instapaper users save, had grown past 2TB, and the Instapaper service was down until Thursday, February 10 at 7:30pm PT.

Nothing on the RDS side warned of the problem. As far as Instapaper could tell, the RDS console offered no monitoring, alert or log that showed the table approaching a 2TB file size limit, or that the instance was subject to such a limit at all, and even after the outage nothing marked the database as having a critical issue. The ten days of automated daily RDS backups were filesystem snapshots with the same limit, so none of them could be used to recover.

After a long call with AWS support and talks with Pinterest's Site Reliability engineers, the only way forward was a full dump and restore of the 2.5TB database to a new instance. Instapaper had estimated six to eight hours for the dump from the number of rows, but the first 25 percent of bookmarks held only 10 percent of the data: the first dump took 24 hours and a second, parallelised one took 10 hours.

Symptom Writes rejectedService outage

Root cause

Trigger
At 12:30PM PT on February 9 the bookmarks table grew past the 2TB file size limit of the instance's filesystem.

Detection

–

Remediation

Action items

Lessons

A filesystem limit that Instapaper did not know about and could not see made both the production database and all its backups useless, and the only way out was to restore the data onto a new filesystem. Because the hosted database could only be reached through MySQL, filesystem-level fixes such as rsync needed Amazon engineers. Even with a perfect response, rebuilding the database would have taken at least 10 hours. The lack of a disaster recovery plan for this kind of failure, and the estimate of the dump time from row counts, made the downtime and recovery longer than necessary, and the response could have drawn better on Pinterest's and AWS's people. The new escalation workflow and monthly backup tests would not have prevented this failure but would speed up the response to a future one.

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, 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.