1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-15 19:15:29 +03:00

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
This commit is contained in:
Andres Freund 2022-05-02 18:09:42 -07:00
parent 24c58f7a2a
commit 5ab8e80148
3 changed files with 67 additions and 0 deletions

View File

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

View File

@ -2561,6 +2561,41 @@ sub wait_for_slot_catchup
=pod =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) =item $node->query_hash($dbname, $query, @columns)
Execute $query on $dbname, replacing any appearance of the string __COLUMNS__ Execute $query on $dbname, replacing any appearance of the string __COLUMNS__

View File

@ -74,6 +74,7 @@ our @EXPORT = qw(
system_log system_log
run_log run_log
run_command run_command
pump_until
command_ok command_ok
command_fails command_fails
@ -393,6 +394,36 @@ sub run_command
=pod =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) =item generate_ascii_string(from_char, to_char)
Generate a string made of the given range of ASCII characters. Generate a string made of the given range of ASCII characters.