Re: Infinite loop in XLogPageRead() on standby

Alexander Kukushkin <cyberdemn@gmail.com>

From: Alexander Kukushkin <cyberdemn@gmail.com>
To: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Cc: michael@paquier.xyz, pgsql-hackers@postgresql.org, thomas.munro@gmail.com
Date: 2024-03-06T10:34:29Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Fix header check for continuation records where standbys could be stuck

  2. Move routines to manipulate WAL into PostgreSQL::Test::Cluster

  3. Prevent archive recovery from scanning non-existent WAL files.

  4. Fix scenario where streaming standby gets stuck at a continuation record.

Hi Kyotaro,

Oh, now I understand what you mean. Is the retry supposed to happen only
when we are reading the very first page from the WAL file?

On Wed, 6 Mar 2024 at 09:57, Kyotaro Horiguchi <horikyota.ntt@gmail.com>
wrote:

>
> xlogrecovery.c:
> @@ -3460,8 +3490,10 @@ retry:
>          * responsible for the validation.
>          */
>         if (StandbyMode &&
> +               targetPagePtr % 0x100000 == 0 &&
>                 !XLogReaderValidatePageHeader(xlogreader, targetPagePtr,
> readBuf))
>         {
>
>
Hmm, I think you meant to use wal_segment_size, because 0x100000 is just
1MB. As a result, currently it works for you by accident.


> Thus, I managed to reproduce precisely the same situation as you
> described utilizing your script with modifications and some core
> tweaks, and with the change above, I saw that the behavior was
> fixed. However, for reasons unclear to me, it shows another issue, and
> I am running out of time and need more caffeine. I'll continue
> investigating this tomorrow.
>

Thank you for spending your time on it!

-- 
Regards,
--
Alexander Kukushkin