Hi, This patch aims to improve 027_stream_regress test's regression test error reporting per Andres' suggestion [1]. It basically dumps 50 lines from head and tail of the regression.diff file to the failure message if both primary and standby is alive and the regression test is failed.
I used the diag() function to dump regression.diff to the failure message. I am not sure if that is the best function to use, open to suggestions. One disadvantage of this patch is that regress_log_027_stream_regress has both complete and head+tail of the regression.diff file. [1] https://www.postgresql.org/message-id/k46gdpibwaevxgb3cefgkl4weykcggal6evlbg5pcei4aswtli%40wrs732j5co3p -- Regards, Nazir Bilal Yavuz Microsoft
From 8c1c69b42607b09dddc74ec25540b6afb48e0bd8 Mon Sep 17 00:00:00 2001 From: Nazir Bilal Yavuz <byavu...@gmail.com> Date: Tue, 17 Jun 2025 16:08:20 +0300 Subject: [PATCH v1] Improve error reporting in 027_stream_regress test Previously, the 027_stream_regress test only reported that the regression test had failed, without showing the actual error. The detailed failure information was hidden in the regression.diffs file. This commit improves the situation by including the head and tail of regression.diffs directly in the failure message if both the primary and standby are alive. This helps quickly identify the root cause without needing to open extra files. Suggested-by: Andres Freund <and...@anarazel.de> --- src/test/perl/PostgreSQL/Test/Cluster.pm | 19 ++++++++ src/test/recovery/t/027_stream_regress.pl | 56 +++++++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/src/test/perl/PostgreSQL/Test/Cluster.pm b/src/test/perl/PostgreSQL/Test/Cluster.pm index 49b2c86b29c..f5bb78bc138 100644 --- a/src/test/perl/PostgreSQL/Test/Cluster.pm +++ b/src/test/perl/PostgreSQL/Test/Cluster.pm @@ -290,6 +290,25 @@ sub connstr =pod +=item $node->is_alive() + +Check if the node is alive. + +=cut + +sub is_alive { + my ($self) = @_; + + my $host = $self->host; + my $port = $self->port; + my $null = File::Spec->devnull; + + my $cmd = "pg_isready -h $host -p $port"; + return !system("$cmd >$null 2>&1"); +} + +=pod + =item $node->raw_connect() Open a raw TCP or Unix domain socket connection to the server. This is diff --git a/src/test/recovery/t/027_stream_regress.pl b/src/test/recovery/t/027_stream_regress.pl index 83def062d11..2bbc8947064 100644 --- a/src/test/recovery/t/027_stream_regress.pl +++ b/src/test/recovery/t/027_stream_regress.pl @@ -81,6 +81,8 @@ my $rc = . "--max-concurrent-tests=20 " . "--inputdir=../regress " . "--outputdir=\"$outputdir\""); +my $primary_alive = $node_primary->is_alive; +my $standby_alive = $node_standby_1->is_alive; if ($rc != 0) { # Dump out the regression diffs file, if there is one @@ -90,9 +92,17 @@ if ($rc != 0) print "=== dumping $diffs ===\n"; print slurp_file($diffs); print "=== EOF ===\n"; + + # Dump 50 lines from head and tail of regression diffs to failure message + if ($primary_alive && $standby_alive) + { + regression_log_helper($diffs, 50); + } } } is($rc, 0, 'regression tests pass'); +is($primary_alive, 1, 'primary is alive after the regression tests'); +is($standby_alive, 1, 'standby is alive after the regression tests'); # Clobber all sequences with their next value, so that we don't have # differences between nodes due to caching. @@ -181,4 +191,50 @@ UPDATE|t), 'check contents of pg_stat_statements on regression database'); $node_standby_1->stop; $node_primary->stop; +sub regression_log_helper +{ + my ($diff_file, $lines_to_dump) = @_; + my @lines; + + open my $fh, '<', $diff_file or die "couldn't open file: $diff_file\n"; + + # Read all lines to process them below + while (my $line = <$fh>) + { + push @lines, $line; + } + close $fh; + + my $line_count = scalar @lines; + + + # If the diff_file has fewer lines than (2 * $lines_to_dump), dump the entire file + if ($line_count <= (2 * $lines_to_dump)) + { + diag("\n=== dumping $diff_file ===\n"); + foreach my $line (@lines) + { + diag($line); + } + } + else + { + diag( + "\n=== dumping $lines_to_dump lines from head of $diff_file ===\n" + ); + for my $i (0 .. $lines_to_dump - 1) + { + diag($lines[$i]); + } + diag( + "\n=== dumping $lines_to_dump lines from tail of $diff_file ===\n" + ); + for my $i ($line_count - $lines_to_dump .. $line_count - 1) + { + diag($lines[$i]); + } + } + diag("=== EOF ===\n\n"); +} + done_testing(); -- 2.49.0