Backpatch addition of wait_for_log(), pump_until().

These were originally introduced in a2ab9c06ea and a2ab9c06ea, as they are
needed by a about-to-be-backpatched test.

Discussion: https://postgr.es/m/20220413002626.udl7lll7f3o7nre7@alap3.anarazel.de
Backpatch: 10-14
This commit is contained in:
Andres Freund 2022-05-02 18:09:44 -07:00
parent 1dd49df783
commit 2adb8debe5
3 changed files with 67 additions and 0 deletions

View File

@ -25,6 +25,7 @@ our @EXPORT = qw(
system_or_bail
system_log
run_log
pump_until
command_ok
command_fails

View File

@ -2065,6 +2065,41 @@ sub wait_for_slot_catchup
=pod
=item $node->wait_for_log(regexp, offset)
Waits for the contents of the server log file, starting at the given offset, to
match the supplied regular expression. Checks the entire log if no offset is
given. Times out after $TestLib::timeout_default seconds.
If successful, returns the length of the entire log file, in bytes.
=cut
sub wait_for_log
{
my ($self, $regexp, $offset) = @_;
$offset = 0 unless defined $offset;
my $max_attempts = 10 * $TestLib::timeout_default;
my $attempts = 0;
while ($attempts < $max_attempts)
{
my $log = TestLib::slurp_file($self->logfile, $offset);
return $offset+length($log) if ($log =~ m/$regexp/);
# Wait 0.1 second before retrying.
usleep(100_000);
$attempts++;
}
croak "timed out waiting for match: $regexp";
}
=pod
=item $node->query_hash($dbname, $query, @columns)
Execute $query on $dbname, replacing any appearance of the string __COLUMNS__

View File

@ -36,6 +36,7 @@ our @EXPORT = qw(
system_or_bail
system_log
run_log
pump_until
command_ok
command_fails
@ -238,6 +239,36 @@ sub run_log
return IPC::Run::run(@_);
}
=pod
=item pump_until(proc, timeout, stream, until)
Pump until string is matched on the specified stream, or timeout occurs.
=cut
sub pump_until
{
my ($proc, $timeout, $stream, $until) = @_;
$proc->pump_nb();
while (1)
{
last if $$stream =~ /$until/;
if ($timeout->is_expired)
{
diag("pump_until: timeout expired when searching for \"$until\" with stream: \"$$stream\"");
return 0;
}
if (not $proc->pumpable())
{
diag("pump_until: process terminated unexpectedly when searching for \"$until\" with stream: \"$$stream\"");
return 0;
}
$proc->pump();
}
return 1;
}
# Generate a string made of the given range of ASCII characters
sub generate_ascii_string
{