On Thu, Apr 02, 2026 at 03:20:59AM +0000, Hayato Kuroda (Fujitsu) wrote:
> Thanks for paying attention the thread.
> I've been considering why the XLogFileClose() is slow only on widowbird but I
> have no idea. But on this thread, I think we can just put a workaround for
> stabilization.

I am not convinced that we have a need for an environment variable for
this case, TBH.  It would be enough to make sure that the spawned
worker is paused on its WaitLatch(), with a naptime large enough to
allow the initial transaction to commit, as in the attached.  When the
interruption is run, the worker would stop at CHECK_FOR_INTERRUPTS(),
before beginning a new transaction.
--
Michael
From fe0a2284d87930cd18d13ff4c473f96de5a965e8 Mon Sep 17 00:00:00 2001
From: Michael Paquier <[email protected]>
Date: Sun, 5 Apr 2026 20:45:16 +0900
Subject: [PATCH] Improve stability of worker_spi termination test

This switches the test to wait for the spawned bgworkers to reach their
main loops, napping.  worker_spi.naptime is enlarged to 10 minutes to
give enough room for slow machines to reach this state.
---
 .../worker_spi/t/002_worker_terminate.pl        | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/test/modules/worker_spi/t/002_worker_terminate.pl 
b/src/test/modules/worker_spi/t/002_worker_terminate.pl
index b0e6a5376d4c..a7d507cc0596 100644
--- a/src/test/modules/worker_spi/t/002_worker_terminate.pl
+++ b/src/test/modules/worker_spi/t/002_worker_terminate.pl
@@ -20,7 +20,6 @@ if ($ENV{enable_injection_points} ne 'yes')
 sub launch_bgworker
 {
        my ($node, $database, $testcase, $interruptible) = @_;
-       my $offset = -s $node->logfile;
 
        # Launch a background worker on the given database.
        my $pid = $node->safe_psql(
@@ -28,13 +27,11 @@ sub launch_bgworker
         SELECT worker_spi_launch($testcase, '$database'::regdatabase, 0, '{}', 
$interruptible);
     ));
 
-       # Check that the bgworker is initialized.
-       $node->wait_for_log(
-               qr/LOG: .*worker_spi dynamic worker $testcase initialized with 
.*\..*/,
-               $offset);
-       my $result = $node->safe_psql('postgres',
-               "SELECT count(*) > 0 FROM pg_stat_activity WHERE pid = $pid;");
-       is($result, 't', "dynamic bgworker $testcase launched");
+       # Check that the bgworker is initialized and napping.
+       my $result = $node->poll_query_until('postgres',
+               qq[SELECT wait_event FROM pg_stat_activity WHERE pid = $pid;],
+               qq[WorkerSpiMain]);
+       is($result, 1, "dynamic bgworker $testcase launched");
 
        return $pid;
 }
@@ -64,11 +61,15 @@ sub run_bgworker_interruptible_test
 
 my $node = PostgreSQL::Test::Cluster->new('mynode');
 $node->init;
+# The naptime is large enough to give room on slow machines to reach
+# the main loop of the spawned workers, after these initialize their
+# schemas.
 $node->append_conf(
        "postgresql.conf", qq(
 autovacuum = off
 debug_parallel_query = off
 log_min_messages = debug1
+worker_spi.naptime = 600
 ));
 $node->start;
 
-- 
2.53.0

Attachment: signature.asc
Description: PGP signature

Reply via email to