aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2024-03-04 10:25:50 +0900
committerMichael Paquier <michael@paquier.xyz>2024-03-04 10:27:50 +0900
commiteca2c1ea85eb22716f93339f4e7cec3145c25723 (patch)
treecb82fbeed2c29ce8731f117ec31669daa03efe68 /src
parent6782709df81f6c68450172605907fa9ff2b7f2b1 (diff)
downloadpostgresql-eca2c1ea85eb22716f93339f4e7cec3145c25723.tar.gz
postgresql-eca2c1ea85eb22716f93339f4e7cec3145c25723.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/test/perl/PostgreSQL/Test/Cluster.pm23
-rw-r--r--src/test/recovery/t/041_checkpoint_at_promote.pl8
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.