Re: Two issues leading to discrepancies in FSM data on the standby server
Melanie Plageman <melanieplageman@gmail.com>
From: Melanie Plageman <melanieplageman@gmail.com>
To: Alexey Makhmutov <a.makhmutov@postgrespro.ru>
Cc: Andrey Borodin <x4mmm@yandex-team.ru>, pgsql-hackers@postgresql.org
Date: 2026-04-14T16:21:57Z
Lists: pgsql-hackers
On Mon, Apr 6, 2026 at 10:26 AM Alexey Makhmutov <a.makhmutov@postgrespro.ru> wrote: > > > Originally in e981653 was used MarkBufferDirty() but 96ef3b8 flipped to MarkBufferDirtyHint(). > > Neither of these commits provided a comment on why this version was chosen. I think if we fix it we must comment things. > > I think that reason of change in 96ef3b8 (changing of 'MarkBufferDirty' > to 'MarkBufferDirtyHint') may be described in the next commit (9df56f6), > during the README update: > > New WAL records cannot be written during recovery, so hint bits set > during recovery must not dirty the page if the buffer is not already > dirty, when checksums are enabled. Systems in Hot-Standby mode may > benefit from hint bits being set, but with checksums enabled, a page > cannot be dirtied after setting a hint bit (due to the torn page risk). > So, it must wait for full-page images containing the hint bit updates to > arrive from the master. > > So, it seems logical, that any changes to the data not protected by the > WAL (which includes VM and FSM as well) should use MarkBufferDirtyHint, > which does not set dirty flag during recovery. However, as FSM blocks > could be just zeroed in case of checksums mismatch, so I think it's > perfectly fine to use regular MarkBufferDirty here. Yea, I agree that this seems like simply an oversight in 96ef3b8. And it seems safe to use MarkBufferDirty() here instead. - Melanie
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Mark modified the FSM buffer as dirty during recovery
- ac3b97db380a 18.4 landed
- 1cf010f21613 17.10 landed
- 54537de35873 16.14 landed
- ca259b084090 15.18 landed
- f5d1038d92cf 14.23 landed
- c06d1a4ba6b2 19 (unreleased) landed