Commit 5ab8e801 authored by Andres Freund's avatar Andres Freund

Backpatch addition of wait_for_log(), pump_until().

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

Discussion: https://postgr.es/m/20220413002626.udl7lll7f3o7nre7@alap3.anarazel.de
Backpatch: 10-14
parent 24c58f7a
......@@ -27,6 +27,7 @@ our @EXPORT = qw(
system_log
run_log
run_command
pump_until
command_ok
command_fails
......
......@@ -2561,6 +2561,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__
......
......@@ -74,6 +74,7 @@ our @EXPORT = qw(
system_log
run_log
run_command
pump_until
command_ok
command_fails
......@@ -393,6 +394,36 @@ sub run_command
=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;
}
=pod
=item generate_ascii_string(from_char, to_char)
Generate a string made of the given range of ASCII characters.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment