Re: Shutdown indefinitely stuck due to unflushed FPI_FOR_HINT record
Fujii Masao <masao.fujii@gmail.com>
From: Fujii Masao <masao.fujii@gmail.com>
To: Anthonin Bonnefoy <anthonin.bonnefoy@datadoghq.com>
Cc: Alexander Lakhin <exclusion@gmail.com>,
PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2026-03-05T23:46:15Z
Lists: pgsql-hackers
Attachments
- v6-0001-Fix-publisher-shutdown-hang-caused-by-logical-wal.patch (application/octet-stream) patch v6-0001
On Thu, Mar 5, 2026 at 5:40 PM Anthonin Bonnefoy <anthonin.bonnefoy@datadoghq.com> wrote: > So it was relying on GetInsertRecPtr() instead of > GetXLogInsertRecPtr(). As mentioned in the thread, GetInsertRecPtr() > only returns the position of the last full xlog page, meaning it > doesn't fix the issue we have where the last partial page contains a > continuation record. > > Testing the XLogFlush(GetInsertRecPtr()) patch with my script, I still > get the shutdown stuck issue. > > Using GetXLogInsertRecPtr() is required to make sure the last partial > page is correctly flushed. Since GetXLogInsertRecPtr() returns a bogus LSN and XLogFlush() does almost nothing during recovery, I added a !RecoveryInProgress() check as follows. I've attached the latest version of the patch and updated the commit message. - if (got_STOPPING) - XLogBackgroundFlush(); + if (got_STOPPING && !RecoveryInProgress()) + XLogFlush(GetXLogInsertRecPtr()); Regards, -- Fujii Masao
Commits
-
Fix WAL flush LSN used by logical walsender during shutdown
- f15471464650 14.23 landed
- fa9f2e317562 15.18 landed
- da21ecf5798c 16.14 landed
- 8ee536c89517 17.10 landed
- 9804981386a0 18.4 landed
- d927b4bd97c8 19 (unreleased) landed
-
Use GetXLogInsertEndRecPtr in gistGetFakeLSN
- b1f14c967202 19 (unreleased) cited
-
Fix publisher shutdown hang caused by logical walsender busy loop.
- 3bf6f22ce151 14.23 landed
- 42734f296615 15.18 landed
- 82935467a033 16.14 landed
- bbbc0888b356 17.10 landed
- 3eb2fecdbbfc 18.4 landed
- 6eedb2a5fd88 19 (unreleased) landed