Re: t/035_standby_logical_decoding.pl might fail on attempt to read wrong timeline

Bertrand Drouvot <bertranddrouvot.pg@gmail.com>

From: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
To: "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>
Cc: Alexander Lakhin <exclusion@gmail.com>, "xunengzhou@gmail.com" <xunengzhou@gmail.com>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2026-06-09T06:03:28Z
Lists: pgsql-hackers

Attachments

Hi,

On Mon, Jun 08, 2026 at 08:47:48AM +0000, Bertrand Drouvot wrote:
> Attached:
> 
> 0001: To fix this race
> 
> Fix by checking GetWALInsertionTimeLineIfSet() when RecoveryInProgress()
> returns true. If InsertTimeLineID is already set (non-zero), the new timeline is
> established and we use it directly, avoiding attempts to read from segments that
> may have been removed.
> 
> 0002: Adding a test in 035_standby_logical_decoding.pl
> 
> It makes use of a new injection point "promotion-after-wal-segment-cleanup" in
> StartupXLOG(), right after CleanupAfterArchiveRecovery() removes old timeline
> WAL segments but before SharedRecoveryState is set to RECOVERY_STATE_DONE.
> 
> The test fails without the fix in 0001 so it also somehow proves that the
> diagnostic is right.
> 
> 0003: Apply the same timeline fix to read_local_xlog_page_guts()
> 
> Indeed, it could hit the same race as mentioned by Xuneng-San.
> 
> 0004: Add a test for 0003

Re-attaching v1 patches here to have the cfbot focusing on those.

Regards,

-- 
Bertrand Drouvot
PostgreSQL Contributors Team
RDS Open Source Databases
Amazon Web Services: https://aws.amazon.com

Commits

  1. Fix second race with timeline selection during promotion

  2. Remove TAP test for timeline lookup race with logical decoding on standbys

  3. Fix race with timeline selection in logical decoding during promotion

  4. Backport GetWALInsertionTimeLineIfSet()

  5. TAP test for logical decoding on standby