Fix WAL flush LSN used by logical walsender during shutdown
Fujii Masao <fujii@postgresql.org>
Fix WAL flush LSN used by logical walsender during shutdown Commit 6eedb2a5fd8 made the logical walsender call XLogFlush(GetXLogInsertRecPtr()) to ensure that all pending WAL is flushed, fixing a publisher shutdown hang. However, if the last WAL record ends at a page boundary, GetXLogInsertRecPtr() can return an LSN pointing past the page header, which can cause XLogFlush() to report an error. A similar issue previously existed in the GiST code. Commit b1f14c96720 introduced GetXLogInsertEndRecPtr(), which returns a safe WAL insertion end location (returning the start of the page when the last record ends at a page boundary), and updated the GiST code to use it with XLogFlush(). This commit fixes the issue by making the logical walsender use XLogFlush(GetXLogInsertEndRecPtr()) when flushing pending WAL during shutdown. Backpatch to all supported versions. Reported-by: Andres Freund <andres@anarazel.de> Author: Anthonin Bonnefoy <anthonin.bonnefoy@datadoghq.com> Reviewed-by: Fujii Masao <masao.fujii@gmail.com> Discussion: https://postgr.es/m/vzguaguldbcyfbyuq76qj7hx5qdr5kmh67gqkncyb2yhsygrdt@dfhcpteqifux Backpatch-through: 14
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/replication/walsender.c | modified | +7 −1 |
Discussion
- Shutdown indefinitely stuck due to unflushed FPI_FOR_HINT record 21 messages · 2026-02-20 → 2026-03-17