Re: Shutdown indefinitely stuck due to unflushed FPI_FOR_HINT record - Mailing list pgsql-hackers

From Anthonin Bonnefoy
Subject Re: Shutdown indefinitely stuck due to unflushed FPI_FOR_HINT record
Date
Msg-id CAO6_Xqq73TPa3M6nQ7RqRhKkcphy1JX7aNGTYy-x_Sn+6a8Z_Q@mail.gmail.com
Whole thread Raw
In response to Re: Shutdown indefinitely stuck due to unflushed FPI_FOR_HINT record  (Alexander Lakhin <exclusion@gmail.com>)
Responses Re: Shutdown indefinitely stuck due to unflushed FPI_FOR_HINT record
List pgsql-hackers
Hi Alexander,

On Thu, Mar 5, 2026 at 7:30 AM Alexander Lakhin <exclusion@gmail.com> wrote:
> Hello Anthonin and Masao-san,
> Thank you for working on this!
>
> It looks like the same issue was discovered and discussed before, but that
> time without a final fix: [1]. I tried v5 patch with my
> 099_walsender_stop.pl test and it executed 100 internal iterations
> successfully, while without the patch it failed for me on iterations 6, 8, 5.
>
> [1] https://www.postgresql.org/message-id/flat/f15d665f-4cd1-4894-037c-afdbe369287e%40gmail.com

Thanks for the tests and the additional context.

Looking at the the thread, the latest patch provided a similar solution using:
+ XLogFlush(GetInsertRecPtr());

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.

Regards,
Anthonin Bonnefoy



pgsql-hackers by date:

Previous
From: David Steele
Date:
Subject: Re: Improve checks for GUC recovery_target_xid
Next
From: Chao Li
Date:
Subject: Re: eliminate xl_heap_visible to reduce WAL (and eventually set VM on-access)