has_wal_read_bug

Thomas Munro <thomas.munro@gmail.com>

From: Thomas Munro <thomas.munro@gmail.com>
To: pgsql-hackers <pgsql-hackers@postgresql.org>
Cc: Noah Misch <noah@leadboat.com>
Date: 2022-05-16T23:50:51Z
Lists: pgsql-hackers
027_stream_regress.pl has:

if (PostgreSQL::Test::Utils::has_wal_read_bug)
{
    # We'd prefer to use Test::More->builder->todo_start, but the bug causes
    # this test file to die(), not merely to fail.
    plan skip_all => 'filesystem bug';
}

Is the die() referenced there the one from the system_or_bail() call
that commit a096813b got rid of?

Here's a failure in 031_recovery_conflict.pl that smells like
concurrent pread() corruption:

https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=tadarida&dt=2022-05-16%2015%3A45%3A54

2022-05-16 18:10:33.375 CEST [52106:1] LOG:  started streaming WAL
from primary at 0/3000000 on timeline 1
2022-05-16 18:10:33.621 CEST [52105:5] LOG:  incorrect resource
manager data checksum in record at 0/338FDC8
2022-05-16 18:10:33.622 CEST [52106:2] FATAL:  terminating walreceiver
process due to administrator command

Presumably we also need the has_wal_read_bug kludge in all these new
tests that use replication.



Commits

  1. If wait_for_catchup fails under has_wal_read_bug, skip balance of test.

  2. Under has_wal_read_bug, skip recovery/t/032_relfilenode_reuse.pl.

  3. Log regression.diffs in 027_stream_regress.pl.