pgsql: Add function to pump IPC process until string match
Add function to pump IPC process until string match
Refactor the recovery tests to not carry a local duplicated copy of
the pump_until function which pumps a process until a defined string
is seen on a stream. This reduces duplication, and is in preparation
for another patch which will also use this functionality.
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Discussion /messages/by-id/YgynUafCyIu3jIhC@paquier.xyz
Branch
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/6da65a3f9a9deae4fdcc768c612b0c8f52759f75
Modified Files
--------------
src/test/perl/PostgreSQL/Test/Utils.pm | 23 +++++++++++++++
src/test/recovery/t/013_crash_restart.pl | 46 +++++++----------------------
src/test/recovery/t/022_crash_temp_files.pl | 45 +++++-----------------------
3 files changed, 41 insertions(+), 73 deletions(-)
Hi,
On 2022-02-23 13:32:03 +0000, Daniel Gustafsson wrote:
Add function to pump IPC process until string match
Refactor the recovery tests to not carry a local duplicated copy of
the pump_until function which pumps a process until a defined string
is seen on a stream. This reduces duplication, and is in preparation
for another patch which will also use this functionality.
I'm a bit disappointed by the moved function not having the diagnostic output
that at least the version in 013_crash_restart.pl had. How is one supposed to
figure out what caused a timeout with the new central version? Given that
timeouts are the only way tests using pump_until() fail, that's not great.
Greetings,
Andres Freund
On 30 Mar 2022, at 00:58, Andres Freund <andres@anarazel.de> wrote:
On 2022-02-23 13:32:03 +0000, Daniel Gustafsson wrote:
Add function to pump IPC process until string match
Refactor the recovery tests to not carry a local duplicated copy of
the pump_until function which pumps a process until a defined string
is seen on a stream. This reduces duplication, and is in preparation
for another patch which will also use this functionality.I'm a bit disappointed by the moved function not having the diagnostic output
that at least the version in 013_crash_restart.pl had. How is one supposed to
figure out what caused a timeout with the new central version?
Thats my bad then. Since we don't really have diag output in any module I was
going off that "precedent" when moving this over.
Given that timeouts are the only way tests using pump_until() fail, that's not
great.
They can also fail on the pumped process crashing/exiting before the timeout
without emitting the expected output.
Would adding back something like the (right now untested) below be what you're
after? Looking at the perldoc I didn't see any other debugging aids we can
emit other than the stream and type of error.
diff --git a/src/test/perl/PostgreSQL/Test/Utils.pm b/src/test/perl/PostgreSQL/Test/Utils.pm
index 15b314d1f8..693f2f02e5 100644
--- a/src/test/perl/PostgreSQL/Test/Utils.pm
+++ b/src/test/perl/PostgreSQL/Test/Utils.pm
@@ -426,8 +426,16 @@ sub pump_until
while (1)
{
last if $$stream =~ /$until/;
- return 0 if ($timeout->is_expired);
- return 0 if (not $proc->pumpable());
+ if ($timeout->is_expired)
+ {
+ diag("pump_until: timeout expired with stream: \"$$stream\"");
+ return 0;
+ }
+ if (not $proc->pumpable())
+ {
+ diag("pump_until: process terminated unexpectedly with stream: \"$$stream\"");
+ return 0
+ }
$proc->pump();
}
return 1;
--
Daniel Gustafsson https://vmware.com/
On 2022-Mar-30, Daniel Gustafsson wrote:
Would adding back something like the (right now untested) below be what you're
after? Looking at the perldoc I didn't see any other debugging aids we can
emit other than the stream and type of error.
I think you could also show the $until that wasn't found. The old .pl
versions of this did that.
--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
Hi,
On 2022-03-30 09:10:17 +0200, Daniel Gustafsson wrote:
On 30 Mar 2022, at 00:58, Andres Freund <andres@anarazel.de> wrote:
On 2022-02-23 13:32:03 +0000, Daniel Gustafsson wrote:Add function to pump IPC process until string match
Refactor the recovery tests to not carry a local duplicated copy of
the pump_until function which pumps a process until a defined string
is seen on a stream. This reduces duplication, and is in preparation
for another patch which will also use this functionality.I'm a bit disappointed by the moved function not having the diagnostic output
that at least the version in 013_crash_restart.pl had. How is one supposed to
figure out what caused a timeout with the new central version?Thats my bad then. Since we don't really have diag output in any module I was
going off that "precedent" when moving this over.
We have a few places that manually output diagnostic stuff by printing with #
etc.
Given that timeouts are the only way tests using pump_until() fail, that's not
great.They can also fail on the pumped process crashing/exiting before the timeout
without emitting the expected output.
Fair.
Would adding back something like the (right now untested) below be what you're
after? Looking at the perldoc I didn't see any other debugging aids we can
emit other than the stream and type of error.
I found showing the regex from before useful. Often there's many
pump_until()'s, and the regex makes it easier to figure out what errored
out. And it shows quoting problem. Since it only happens when there was a
failure, it's not like it'll bloat the log unduly.
Greetings,
Andres Freund
On 30 Mar 2022, at 18:09, Andres Freund <andres@anarazel.de> wrote:
Would adding back something like the (right now untested) below be what you're
after? Looking at the perldoc I didn't see any other debugging aids we can
emit other than the stream and type of error.I found showing the regex from before useful. Often there's many
pump_until()'s, and the regex makes it easier to figure out what errored
out. And it shows quoting problem. Since it only happens when there was a
failure, it's not like it'll bloat the log unduly.
I'll add diag output on failures along the lines of the diff from earlier today
but with the regex as well (which Alvarao also requested), but tomorrow morning
once coffee has been consumed.
--
Daniel Gustafsson https://vmware.com/
On 2022-03-31 00:00:52 +0200, Daniel Gustafsson wrote:
I'll add diag output on failures along the lines of the diff from earlier today
but with the regex as well (which Alvarao also requested), but tomorrow morning
once coffee has been consumed.
Thanks for doing that!