Incident Library

IL-0527 OpenStreetMap Foundation · 2025-06-25database

OpenStreetMap.org made no replication diffs for 16 hours as PostgreSQL logical decoding failed on a memory alloc error

OpenStreetMap.org publishes minutely, hourly and daily replication diffs that its own services and third parties use to stay up to date with map edits. osmdbt builds them from a PostgreSQL logical replication slot: osmdbt-get-log reads the changes into log data and osmdbt-create-diff writes the diff. PostgreSQL had been upgraded to 15.13-1.pgdg22.04+1 on 30 May 2025. From 21:33 UTC on 25 June the query osmdbt-get-log runs failed every time with ERROR: invalid memory alloc request size 1243650064, and no diffs were produced. The operations team names an unidentified condition in PostgreSQL replication as the cause and considers it possible that recent changes in PostgreSQL 15.13 caused or influenced it.

Alertmanager alerted at 21:40 UTC, but no pager or SMS alert went out, and the team responded early on 26 June. Running osmdbt with fewer changesets per diff produced five diffs before failing again. An operations engineer raised the problem with the osmdbt developer on IRC at 06:49 UTC, and together they worked out a workaround that uses fakelog, an osmdbt component, to skip ahead of the replication condition. Edits had to be suppressed while fakelog was used, so after confirming that the weekly PostgreSQL backup had finished, the team put OpenStreetMap.org into a read-only maintenance window at 12:56 UTC. The manual fakelog runs produced diffs 006/658/640 to 006/658/673 between 13:13 and 13:17 UTC, the osmdbt timer was restarted at 13:21 UTC, and the read-only window ended at 13:22 UTC after about 25 minutes, about 16 hours after the first failure.

Severity
–
Scope
No OpenStreetMap.org replication diffs for about 16 hours, so tile.openstreetmap.org, Nominatim, Overpass and third-party services could not stay up to date with map edits; the website and mapping API were read-only for about 25 minutes during the fix
Users affected
–
Region
–
Time to detect
7m
Time to resolve
15h 49m

Symptoms

At 21:40 UTC on 25 June 2025, Alertmanager alerted the OpenStreetMap operations team: minutely replication feed delayed - 6m 2s. Since 21:33 UTC every run of the osmdbt timer that produces the minutely replication diffs had failed with ERROR: invalid memory alloc request size 1243650064.

The error came from PostgreSQL, in the query that osmdbt-get-log runs on the logical replication slot "osmdbt": SELECT * FROM pg_logical_slot_peek_changes($1, NULL, NULL). No minutely, hourly or daily diffs were produced, so tile.openstreetmap.org, Nominatim, Overpass and third-party services stopped receiving map edits. None of the alerts was a pager or SMS alert; the first community report came at 00:37 UTC on 26 June and the first social media report at 01:13 UTC.

At 06:08 UTC on 26 June the operations team stopped the osmdbt timer and ran osmdbt by hand with a reduced maximum number of changesets. Five diffs succeeded, then the error returned, until even --max-changes=1 triggered it. The team and the osmdbt developer looked at whether a huge set of map changes, such as 15 million or more node changes, had overwhelmed the PostgreSQL internal replication logs that osmdbt reads.

Symptom Replication lag

Root cause

Trigger
–

Detection

Alertmanager sent the first alert at 21:40 UTC, minutely replication feed delayed - 6m 2s, and several more followed, but none was a pager or SMS alert. A community report followed at 00:37 UTC and a social media report at 01:13 UTC.

Remediation

Action items

Lessons

Communication with the osmdbt developer was crucial for working out the workaround, and the operations team's understanding of osmdbt was limited.

Sources

References

Related cases

Check your cluster for this

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