postgres.git / summary / log / commit / refs

commit    a2a4992215c5ff804a2bf2d47efab46abed532cc
Author:   Noah Misch <noah@leadboat.com>
Date:     Thu Jan 27 02:06:19 2022 +0000
First released in: 15.0, 10.20, 11.15, 12.10, 13.6, 14.2

    On sparc64+ext4, suppress test failures from known WAL read failure.
    
    Buildfarm members kittiwake, tadarida and snapper began to fail
    frequently when commits 3cd9c3b921977272e6650a5efbeade4203c4bca2 and
    f47ed79cc8a0cfa154dc7f01faaf59822552363f added tests of concurrency, but
    the problem was reachable before those commits.  Back-patch to v10 (all
    supported versions).
    
    Discussion: https://postgr.es/m/20220116210241.GC756210@rfd.leadboat.com


src/bin/pgbench/t/023_cic_2pc.pl | 2 ++ src/test/perl/TestLib.pm | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/bin/pgbench/t/023_cic_2pc.pl b/src/bin/pgbench/t/023_cic_2pc.pl index e29c2564b77..707f28c34e8 100644 --- a/src/bin/pgbench/t/023_cic_2pc.pl +++ b/src/bin/pgbench/t/023_cic_2pc.pl @@ -11,6 +11,8 @@ use TestLib; use Test::More tests => 6; +local $TODO = 'filesystem bug' if TestLib::has_wal_read_bug; + my ($node, $result); # diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index 2676976ed03..3359b184203 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -211,6 +211,29 @@ sub perl2host return $dir . $leaf; } +=pod + +=item has_wal_read_bug() + +Returns true if $tmp_check is subject to a sparc64+ext4 bug that causes WAL +readers to see zeros if another process simultaneously wrote the same offsets. +Consult this in tests that fail frequently on affected configurations. The +bug has made streaming standbys fail to advance, reporting corrupt WAL. It +has made COMMIT PREPARED fail with "could not read two-phase state from WAL". +Non-WAL PostgreSQL reads haven't been affected, likely because those readers +and writers have buffering systems in common. See +https://postgr.es/m/20220116210241.GC756210@rfd.leadboat.com for details. + +=cut + +sub has_wal_read_bug +{ + return + $Config{osname} eq 'linux' + && $Config{archname} =~ /^sparc/ + && !run_log([ qw(df -x ext4), $tmp_check ], '>', '/dev/null', '2>&1'); +} + sub system_log { print("# Running: " . join(" ", @_) . "\n"); [parent: 645c9457f296]