On 2021-Sep-30, Tom Lane wrote: > Just when you thought it was safe to go back in the water: > > https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=prairiedog&dt=2021-09-29%2022%3A05%3A44 > > which is complaining that the (misspelled, BTW)
Ah, the case of the missing juxtaposed consonants. Les Luthiers have something to say on that matter. https://www.youtube.com/watch?v=ptorPqV7D5s > log message 'sucessfully skipped missing contrecord at' doesn't show > up. Hmm. Well, as I said, maybe this part of the test isn't worth much anyway. Rather than spending time trying to figure out why isn't this triggering the WAL overwriting, I compared the coverage report for running only the first test to the coverage report of running only the second test. It turns out that there's no relevant coverage increase in the second test. So I propose just removing that part. (The reason I added that test in the first place was to try to reproduce the problem without having to physically unlink a WAL file from the primary's pg_wal subdir. But maybe it's just make-work.) -- Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
>From 759846455920d1886a154b2b159363d353ba0def Mon Sep 17 00:00:00 2001 From: Alvaro Herrera <alvhe...@alvh.no-ip.org> Date: Thu, 30 Sep 2021 16:55:17 -0300 Subject: [PATCH] Remove test, fix typo --- src/backend/access/transam/xlog.c | 2 +- .../recovery/t/026_overwrite_contrecord.pl | 116 +----------------- src/test/recovery/t/idiosyncratic_copy | 20 --- 3 files changed, 3 insertions(+), 135 deletions(-) delete mode 100755 src/test/recovery/t/idiosyncratic_copy diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 1388afdfb0..f8c714b7b7 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -10598,7 +10598,7 @@ VerifyOverwriteContrecord(xl_overwrite_contrecord *xlrec, XLogReaderState *state LSN_FORMAT_ARGS(state->overwrittenRecPtr)); ereport(LOG, - (errmsg("sucessfully skipped missing contrecord at %X/%X, overwritten at %s", + (errmsg("successfully skipped missing contrecord at %X/%X, overwritten at %s", LSN_FORMAT_ARGS(xlrec->overwritten_lsn), timestamptz_to_str(xlrec->overwrite_time)))); diff --git a/src/test/recovery/t/026_overwrite_contrecord.pl b/src/test/recovery/t/026_overwrite_contrecord.pl index acf9bd08d1..1725a97531 100644 --- a/src/test/recovery/t/026_overwrite_contrecord.pl +++ b/src/test/recovery/t/026_overwrite_contrecord.pl @@ -10,7 +10,7 @@ use PostgresNode; use TestLib; use Test::More; -plan tests => 5; +plan tests => 3; # Test: Create a physical replica that's missing the last WAL file, # then restart the primary to create a divergent WAL file and observe @@ -89,120 +89,8 @@ ok($node_standby->safe_psql('postgres', 'select * from foo') eq 'hello', my $log = slurp_file($node_standby->logfile); like( $log, - qr[sucessfully skipped missing contrecord at], + qr[successfully skipped missing contrecord at], "found log line in standby"); $node->stop; $node_standby->stop; - - -# Second test: a standby that receives WAL via archive/restore commands. -$node = PostgresNode->new('primary2'); -$node->init( - has_archiving => 1, - extra => ['--wal-segsize=1']); -$node->set_replication_conf; - -# Note: consistent use of forward slashes here avoids any escaping problems -# that arise from use of backslashes. That means we need to double-quote all -# the paths in the archive_command -my $perlbin = TestLib::perl2host($^X); -$perlbin =~ s!\\!/!g if $TestLib::windows_os; -my $archivedir = $node->archive_dir; -$archivedir =~ s!\\!/!g if $TestLib::windows_os; -$node->append_conf( - 'postgresql.conf', - qq{ -archive_command = '"$perlbin" "$FindBin::RealBin/idiosyncratic_copy" "%p" "$archivedir/%f"' -wal_level = replica -max_wal_senders = 2 -wal_keep_size = 1GB -}); -# Make sure that Msys perl doesn't complain about difficulty in setting locale -# when called from the archive_command. -local $ENV{PERL_BADLANG} = 0; -$node->start; -$node->backup('backup'); - -$node_standby = PostgresNode->new('standby2'); -$node_standby->init_from_backup($node, 'backup', has_restoring => 1); - -$node_standby->start; - -$node->safe_psql('postgres', 'create table filler (a int)'); -# First, measure how many bytes does the insertion of 1000 rows produce -$start_lsn = - $node->safe_psql('postgres', q{select pg_current_wal_insert_lsn() - '0/0'}); -$node->safe_psql('postgres', - 'insert into filler select * from generate_series(1, 1000)'); -$end_lsn = - $node->safe_psql('postgres', q{select pg_current_wal_insert_lsn() - '0/0'}); -$rows_walsize = $end_lsn - $start_lsn; - -# Now consume all remaining room in the current WAL segment, leaving -# space enough only for the start of a largish record. -$node->safe_psql( - 'postgres', qq{ -WITH setting AS ( - SELECT setting::int AS wal_segsize - FROM pg_settings WHERE name = 'wal_segment_size' -) -INSERT INTO filler -SELECT g FROM setting, - generate_series(1, 1000 * (wal_segsize - ((pg_current_wal_insert_lsn() - '0/0') % wal_segsize)) / $rows_walsize) g -}); - -# Now block idiosyncratic_copy from creating the next WAL in the replica -my $archivedgood = $node->safe_psql('postgres', - q{SELECT pg_walfile_name(pg_current_wal_insert_lsn())}); -my $archivedfail = $node->safe_psql( - 'postgres', - q{SELECT pg_walfile_name(pg_current_wal_insert_lsn() + setting::integer) - from pg_settings where name = 'wal_segment_size'}); -open my $filefail, ">", "$archivedir/$archivedfail.fail" - or die "can't open $archivedir/$archivedfail.fail: $!"; - -my $currlsn = - $node->safe_psql('postgres', 'select pg_current_wal_insert_lsn() - 1000'); - -# Now produce a large WAL record in a transaction that we leave open -my ($in, $out); -my $timer = IPC::Run::timeout(180); -my $h = - $node->background_psql('postgres', \$in, \$out, $timer, on_error_stop => 0); - -$in .= qq{BEGIN; -SELECT pg_logical_emit_message(true, 'test 026', repeat('somenoise', 8192)); -}; -$h->pump_nb; -$node->poll_query_until( - 'postgres', - "SELECT last_archived_wal >= '$archivedgood' FROM pg_stat_archiver"), - or die "Timed out while waiting for standby to catch up"; - -# Now crash the node with the transaction open -$node->stop('immediate'); -$h->finish(); -$node->start; -$node->safe_psql('postgres', 'create table witness (a int);'); -$node->safe_psql('postgres', 'insert into witness values (42)'); -unlink "$archivedir/$archivedfail.fail" - or die "can't unlink $archivedir/$archivedfail.fail: $!"; -$node->safe_psql('postgres', 'select pg_switch_wal()'); - -$until_lsn = $node->safe_psql('postgres', "SELECT pg_current_wal_lsn()"); -$caughtup_query = "SELECT '$until_lsn'::pg_lsn <= pg_last_wal_replay_lsn()"; -$node_standby->poll_query_until('postgres', $caughtup_query) - or die "Timed out while waiting for standby to catch up"; - -my $answer = $node_standby->safe_psql('postgres', 'select * from witness'); -is($answer, '42', 'witness tuple appears'); - -# Verify message appears in standby's log -$log = slurp_file($node_standby->logfile); -like( - $log, - qr[sucessfully skipped missing contrecord at], - "found log line in standby"); -$node->stop; -$node_standby->stop; diff --git a/src/test/recovery/t/idiosyncratic_copy b/src/test/recovery/t/idiosyncratic_copy deleted file mode 100755 index 83e25e0e89..0000000000 --- a/src/test/recovery/t/idiosyncratic_copy +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/perl - -use strict; -use warnings; - -use File::Copy; - -die "wrong number of arguments" if @ARGV != 2; -my ($source, $target) = @ARGV; -if ($^O eq 'msys') -{ - # make a windows path look like an msys path if necessary - $source =~ s!^([A-Za-z]):!'/' . lc($1)!e; - $source =~ s!\\!/!g; -} - -die "$0: failed copy of $target" if -f "$target.fail"; - -copy($source, $target) or die "couldn't copy $source to $target: $!"; -print STDERR "$0: archived $source to $target successfully\n"; -- 2.30.2