mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Backpatch addition of wait_for_log(), pump_until().
These were originally introduced ina2ab9c06eaanda2ab9c06ea, 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:
		@@ -25,6 +25,7 @@ our @EXPORT = qw(
 | 
			
		||||
  system_or_bail
 | 
			
		||||
  system_log
 | 
			
		||||
  run_log
 | 
			
		||||
  pump_until
 | 
			
		||||
 | 
			
		||||
  command_ok
 | 
			
		||||
  command_fails
 | 
			
		||||
 
 | 
			
		||||
@@ -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__
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user