standby-slot-test-1-timeout-v1.patch

text/plain

Filename: standby-slot-test-1-timeout-v1.patch
Type: text/plain
Part: 1
Message: 035_standby_logical_decoding unbounded hang

Patch

Format: unified
Series: patch v1
File+
src/test/recovery/t/035_standby_logical_decoding.pl 3 3
Author:     Noah Misch <noah@leadboat.com>
Commit:     Noah Misch <noah@leadboat.com>

    Bound waits in 035_standby_logical_decoding.pl.
    
    One IPC::Run::start() used an IPC::Run::timer() without checking for
    expiration.  The other used no timeout or timer.  Back-patch to v16,
    which introduced the test.
    
    Reviewed by FIXME.
    
    Discussion: https://postgr.es/m/FIXME

diff --git a/src/test/recovery/t/035_standby_logical_decoding.pl b/src/test/recovery/t/035_standby_logical_decoding.pl
index c371369..61da915 100644
--- a/src/test/recovery/t/035_standby_logical_decoding.pl
+++ b/src/test/recovery/t/035_standby_logical_decoding.pl
@@ -21,7 +21,6 @@ my $node_cascading_standby =
   PostgreSQL::Test::Cluster->new('cascading_standby');
 my $node_subscriber = PostgreSQL::Test::Cluster->new('subscriber');
 my $default_timeout = $PostgreSQL::Test::Utils::timeout_default;
-my $psql_timeout = IPC::Run::timer($default_timeout);
 my $res;
 
 # Name for the physical slot on primary
@@ -90,7 +89,8 @@ sub make_slot_active
 		'>',
 		$to_stdout,
 		'2>',
-		$to_stderr);
+		$to_stderr,
+		IPC::Run::timeout($default_timeout));
 
 	if ($wait)
 	{
@@ -341,7 +341,7 @@ $psql_subscriber{run} = IPC::Run::start(
 	\$psql_subscriber{subscriber_stdout},
 	'2>',
 	\$psql_subscriber{subscriber_stderr},
-	$psql_timeout);
+	IPC::Run::timeout($default_timeout));
 
 ##################################################
 # Test that logical decoding on the standby