agora inbox for [email protected]
help / color / mirror / Atom feedFrom: Andres Freund <[email protected]>
Subject: [PATCH v2 2/4] tests: Add note if BackgroundPsql::wait_connect() fails
Date: Fri, 7 Mar 2025 09:44:00 -0500
If wait_connect() failed due to psql exiting, all that we'd see is a "process
ended prematurely" error thrown by IPC::Run, without ever seeing psql's error
message.
Address that by wrapping the pump() call in eval and taking note of stdout &
stderr in case of failure.
We might want to do that in pump_until() as well, but that seems to require
API changes, so let's do the easily achievable bit first.
Reviewed-by: Heikki Linnakangas <[email protected]>
Discussion: https://postgr.es/m/ggflhkciwdyotpoie323chu2c2idpjk5qimrn462encwx2io7s@thmcxl7i6dpw
---
.../perl/PostgreSQL/Test/BackgroundPsql.pm | 26 ++++++++++++++++---
1 file changed, 22 insertions(+), 4 deletions(-)
diff --git a/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm b/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm
index c611a61cf4e..1deb410c133 100644
--- a/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm
+++ b/src/test/perl/PostgreSQL/Test/BackgroundPsql.pm
@@ -154,10 +154,28 @@ sub wait_connect
my $banner = "background_psql: ready";
my $banner_match = qr/(^|\n)$banner\r?\n/;
$self->{stdin} .= "\\echo $banner\n\\warn $banner\n";
- $self->{run}->pump()
- until ($self->{stdout} =~ /$banner_match/
- && $self->{stderr} =~ /$banner\r?\n/)
- || $self->{timeout}->is_expired;
+
+ # IPC::Run throws in case psql exits while we're pumping. To make it
+ # easier to diagnose that, catch the error, report stdout/stderr at time
+ # of death and reraise.
+ eval {
+ $self->{run}->pump()
+ until ($self->{stdout} =~ /$banner_match/
+ && $self->{stderr} =~ /$banner\r?\n/)
+ || $self->{timeout}->is_expired;
+ };
+ if ($@)
+ {
+ chomp(my $stdout = $self->{stdout});
+ chomp(my $stderr = $self->{stderr});
+ chomp(my $err = $@);
+ diag qq(psql died while connecting:
+ stdout: $stdout
+ stderr: $stderr
+ perl error: $err
+);
+ die "psql died while connecting";
+ }
note "connect output:\n",
explain {
--
2.48.1.76.g4e746b1a31.dirty
--q4d36jgrlhdhudrc
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="v2-0003-tests-Fix-race-condition-in-postmaster-002_connec.patch"
view thread (73+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected]
Subject: Re: [PATCH v2 2/4] tests: Add note if BackgroundPsql::wait_connect() fails
In-Reply-To: <no-message-id-693251@localhost>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox