postgres.git / summary / log / commit / refs

commit    eca2c1ea85eb22716f93339f4e7cec3145c25723
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Mon Mar 04 01:25:50 2024 +0000
First released in: 17.0

    Add PostgreSQL::Test::Cluster::wait_for_event()
    
    Per a demand from the author and the reviewer of this commit, this adds
    to Cluster.pm a helper routine that can be used to monitor when a
    process reaches a wanted wait event.  This can be used in combination
    with the module injection_points for the "wait" callback, though it is
    not limited to it as this monitors pg_stat_activity for a wait_event and
    a backend_type.
    
    Author: Bertrand Drouvot
    Reviewed-by: Andrey Borodin
    Discussion: https://postgr.es/m/ZeBB4RMPEZ06TcdY@ip-10-97-1-34.eu-west-3.compute.internal


src/test/perl/PostgreSQL/Test/Cluster.pm | 23 +++++++++++++++++++++++ src/test/recovery/t/041_checkpoint_at_promote.pl | 8 +------- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/test/perl/PostgreSQL/Test/Cluster.pm b/src/test/perl/PostgreSQL/Test/Cluster.pm index 44c1bb5afd0..4fec417f6fa 100644 --- a/src/test/perl/PostgreSQL/Test/Cluster.pm +++ b/src/test/perl/PostgreSQL/Test/Cluster.pm @@ -2742,6 +2742,29 @@ sub lsn =pod +=item $node->wait_for_event(wait_event_name, backend_type) + +Poll pg_stat_activity until backend_type reaches wait_event_name. + +=cut + +sub wait_for_event +{ + my ($self, $backend_type, $wait_event_name) = @_; + + $self->poll_query_until( + 'postgres', qq[ + SELECT count(*) > 0 FROM pg_stat_activity + WHERE backend_type = '$backend_type' AND wait_event = '$wait_event_name' + ]) + or die + qq(timed out when waiting for $backend_type to reach wait event '$wait_event_name'); + + return; +} + +=pod + =item $node->wait_for_catchup(standby_name, mode, target_lsn) Wait for the replication connection with application_name standby_name until diff --git a/src/test/recovery/t/041_checkpoint_at_promote.pl b/src/test/recovery/t/041_checkpoint_at_promote.pl index 1a6a8d86a1c..7c307314eae 100644 --- a/src/test/recovery/t/041_checkpoint_at_promote.pl +++ b/src/test/recovery/t/041_checkpoint_at_promote.pl @@ -78,13 +78,7 @@ $node_primary->wait_for_replay_catchup($node_standby); # Wait until the checkpointer is in the middle of the restart point # processing. -ok( $node_standby->poll_query_until( - 'postgres', - qq[SELECT count(*) FROM pg_stat_activity - WHERE backend_type = 'checkpointer' AND wait_event = 'create-restart-point' ;], - '1'), - 'checkpointer is waiting in restart point' -) or die "Timed out while waiting for checkpointer to run restart point"; +$node_standby->wait_for_event('checkpointer', 'create-restart-point'); # Check the logs that the restart point has started on standby. This is # optional, but let's be sure. [parent: 6782709df81f]