Re: pg_logical_slot_get_changes waits continously for a partial WAL record spanning across 2 pages

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>
Cc: vignesh C <vignesh21@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Alexander Korotkov <aekorotkov@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, Amit Kapila <amit.kapila16@gmail.com>, Melanie Plageman <melanieplageman@gmail.com>
Date: 2025-07-15T23:16:28Z
Lists: pgsql-hackers
On Tue, Jul 15, 2025 at 09:14:27AM +0000, Hayato Kuroda (Fujitsu) wrote:
> I put pg_logical_emit_message() after injection_points_wakeup(), but your patch
> puts it before. I verified even your patch can reproduce the issue, but is there
> a reason?
> (This is not a comment which must be fixed, I just want to know the reason to study)

It's for increasing the odds, so as the cross-page record finds its
way to disk when doing the recovery phase.  I was wondering about
forcing a flush of pg_logical_emit_message(), as well, but the
reproduction rate was still good enough without it.

>> With all that said, I'll move on with this stuff once the embargo for
>> v18 beta2 is lifted and the tag is pushed.  That should happen in 24h
>> or so, I guess.
> 
> The provided patches looks good to me.

Thanks for the reviews!
--
Michael

Commits

  1. Fix infinite wait when reading a partially written WAL record

  2. Improve the stability of the recovery test 047_checkpoint_physical_slot

  3. Improve recovery test 046_checkpoint_logical_slot