diff options
author | Robert Haas <rhaas@postgresql.org> | 2024-01-26 13:25:19 -0500 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2024-01-26 13:25:19 -0500 |
commit | 5ddf9973477729cf161b4ad0a1efd52f4fea9c88 (patch) | |
tree | bcf3b9c62a6bcdb3d239cb02059e65ce822c8daa | |
parent | 5eafacd2797dc0b04a0bde25fbf26bf79903e7c2 (diff) | |
download | postgresql-5ddf9973477729cf161b4ad0a1efd52f4fea9c88.tar.gz postgresql-5ddf9973477729cf161b4ad0a1efd52f4fea9c88.zip |
Temporary patch to help debug pg_walsummary test failures.
The tests in 002_blocks.pl are failing in the buildfarm from time to
time, but we don't know how to reproduce the failure elsewhere. The
most obvious explanation seems to be the unexpected disappearance of a
WAL summary file, so bump up the logging level in
RemoveWalSummaryIfOlderThan to try to help us spot such problems, and
print the cutoff time in addition to the removed filename. Also
adjust 002_blocks.pl to dump out a directory listing of the relevant
directory at various points.
This patch should be reverted once we sort out what's happening here.
Patch by me, reviewed by Nathan Bossart, who also reported the issue.
Discussion: http://postgr.es/m/20240124170846.GA2643050@nathanxps13
-rw-r--r-- | src/backend/backup/walsummary.c | 7 | ||||
-rw-r--r-- | src/bin/pg_walsummary/t/002_blocks.pl | 14 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/backend/backup/walsummary.c b/src/backend/backup/walsummary.c index b549673a9df..ae314d8b74d 100644 --- a/src/backend/backup/walsummary.c +++ b/src/backend/backup/walsummary.c @@ -251,8 +251,15 @@ RemoveWalSummaryIfOlderThan(WalSummaryFile *ws, time_t cutoff_time) ereport(ERROR, (errcode_for_file_access(), errmsg("could not stat file \"%s\": %m", path))); + /* XXX temporarily changed to debug buildfarm failures */ +#if 0 ereport(DEBUG2, (errmsg_internal("removing file \"%s\"", path))); +#else + ereport(LOG, + (errmsg_internal("removing file \"%s\" cutoff_time=%llu", path, + (unsigned long long) cutoff_time))); +#endif } /* diff --git a/src/bin/pg_walsummary/t/002_blocks.pl b/src/bin/pg_walsummary/t/002_blocks.pl index d609d2c5473..40908da8cb4 100644 --- a/src/bin/pg_walsummary/t/002_blocks.pl +++ b/src/bin/pg_walsummary/t/002_blocks.pl @@ -48,6 +48,7 @@ SELECT summarized_tli, summarized_lsn FROM pg_get_wal_summarizer_state() EOM ($summarized_tli, $summarized_lsn) = split(/\|/, $progress); note("after insert, summarized TLI $summarized_tli through $summarized_lsn"); +note_wal_summary_dir("after insert", $node1); # Update a row in the first block of the table and trigger a checkpoint. $node1->safe_psql('postgres', <<EOM); @@ -70,6 +71,7 @@ SELECT tli, start_lsn, end_lsn from pg_available_wal_summaries() EOM my ($tli, $start_lsn, $end_lsn) = split(/\|/, $details); note("examining summary for TLI $tli from $start_lsn to $end_lsn"); +note_wal_summary_dir("after new summary", $node1); # Reconstruct the full pathname for the WAL summary file. my $filename = sprintf "%s/pg_wal/summaries/%08s%08s%08s%08s%08s.summary", @@ -77,6 +79,7 @@ my $filename = sprintf "%s/pg_wal/summaries/%08s%08s%08s%08s%08s.summary", split(m@/@, $start_lsn), split(m@/@, $end_lsn); ok(-f $filename, "WAL summary file exists"); +note_wal_summary_dir("after existence check", $node1); # Run pg_walsummary on it. We expect block 0 to be modified, but depending # on where the new tuple ends up, block 1 might also be modified, so we @@ -84,5 +87,16 @@ ok(-f $filename, "WAL summary file exists"); my ($stdout, $stderr) = run_command([ 'pg_walsummary', '-i', $filename ]); like($stdout, qr/FORK main: block 0$/m, "stdout shows block 0 modified"); is($stderr, '', 'stderr is empty'); +note_wal_summary_dir("after pg_walsummary run", $node1); done_testing(); + +# XXX. Temporary debugging code. +sub note_wal_summary_dir +{ + my ($flair, $node) = @_; + + my $wsdir = sprintf "%s/pg_wal/summaries", $node->data_dir; + my @wsfiles = grep { $_ ne '.' && $_ ne '..' } slurp_dir($wsdir); + note("$flair pg_wal/summaries has: @wsfiles"); +} |