From ebbc32bd3af9fe281c28f83f30ffaa3bd6378254 Mon Sep 17 00:00:00 2001 From: Hayato Kuroda Date: Fri, 7 Aug 2026 15:35:31 +0900 Subject: [PATCH] Stablize 019_replslot_limit --- src/test/recovery/t/019_replslot_limit.pl | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/test/recovery/t/019_replslot_limit.pl b/src/test/recovery/t/019_replslot_limit.pl index a412faf51c6..5772073f016 100644 --- a/src/test/recovery/t/019_replslot_limit.pl +++ b/src/test/recovery/t/019_replslot_limit.pl @@ -302,12 +302,14 @@ if ($PostgreSQL::Test::Utils::windows_os) # Get a slot terminated while the walsender is active # We do this by sending SIGSTOP to the walsender. Skip this on Windows. +# max_wal_size is set to the larger value to prevent other checkpoints from +# occurring my $node_primary3 = PostgreSQL::Test::Cluster->new('primary3'); $node_primary3->init(allows_streaming => 1, extra => ['--wal-segsize=1']); $node_primary3->append_conf( 'postgresql.conf', qq( min_wal_size = 2MB - max_wal_size = 2MB + max_wal_size = 40MB log_checkpoints = yes max_slot_wal_keep_size = 1MB )); @@ -374,6 +376,15 @@ $logstart = -s $node_primary3->logfile; kill 'STOP', $senderpid, $receiverpid; $node_primary3->advance_wal(2); +# Start a psql session to run the checkpoint in the background. It cannot +# complete while the walsender is stopped. +my $checkpoint = $node_primary3->background_psql('postgres'); +$checkpoint->query_until( + qr/starting_checkpoint/, q( + \echo starting_checkpoint + CHECKPOINT; +)); + my $msg_logged = 0; my $max_attempts = $PostgreSQL::Test::Utils::timeout_default; while ($max_attempts-- >= 0) @@ -397,6 +408,7 @@ $node_primary3->poll_query_until('postgres', "SELECT wal_status FROM pg_replication_slots WHERE slot_name = 'rep3'", "lost") or die "timed out waiting for slot to be lost"; +$checkpoint->quit; $msg_logged = 0; $max_attempts = $PostgreSQL::Test::Utils::timeout_default; -- 2.52.0