Backpatch addition of pump_until() more completely.
authorAndres Freund
Fri, 6 May 2022 15:38:19 +0000 (08:38 -0700)
committerAndres Freund
Fri, 6 May 2022 15:38:19 +0000 (08:38 -0700)
In a2ab9c06ea1 I just backpatched the introduction of pump_until(), without
changing the existing local definitions (as 6da65a3f9a9). The necessary
changes seemed more verbose than desirable. However, that leads to warnings,
as I failed to realize...

Backpatch to all versions containing pump_until() calls before
f74496dd611 (there's none in 10).

Discussion: https://postgr.es/m/2808491.1651802860@sss.pgh.pa.us
Discussion: https://postgr.es/m/18b37361-b482-b9d8-f30d-6115cd5ce25c@enterprisedb.com
Backpatch: 11-14

src/test/recovery/t/013_crash_restart.pl
src/test/recovery/t/022_crash_temp_files.pl

index b1e9d82809a01abb345343a0b777b3c2dbee8bac..0ed15518265434412b848e3a8260943a13db2b7f 100644 (file)
@@ -74,7 +74,7 @@ CREATE TABLE alive(status text);
 INSERT INTO alive VALUES($$committed-before-sigquit$$);
 SELECT pg_backend_pid();
 ];
-ok(pump_until($killme, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
+ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
    'acquired pid for SIGQUIT');
 my $pid = $killme_stdout;
 chomp($pid);
@@ -86,7 +86,7 @@ $killme_stdin .= q[
 BEGIN;
 INSERT INTO alive VALUES($$in-progress-before-sigquit$$) RETURNING status;
 ];
-ok(pump_until($killme, \$killme_stdout, qr/in-progress-before-sigquit/m),
+ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/in-progress-before-sigquit/m),
    'inserted in-progress-before-sigquit');
 $killme_stdout = '';
 $killme_stderr = '';
@@ -99,7 +99,7 @@ $monitor_stdin .= q[
 SELECT $$psql-connected$$;
 SELECT pg_sleep(3600);
 ];
-ok(pump_until($monitor, \$monitor_stdout, qr/psql-connected/m),
+ok(pump_until($monitor, $psql_timeout, \$monitor_stdout, qr/psql-connected/m),
    'monitor connected');
 $monitor_stdout = '';
 $monitor_stderr = '';
@@ -116,6 +116,7 @@ SELECT 1;
 ];
 ok( pump_until(
        $killme,
+       $psql_timeout,
        \$killme_stderr,
        qr/WARNING:  terminating connection because of unexpected SIGQUIT signal|server closed the connection unexpectedly|connection to server was lost|could not send data to server/m
    ),
@@ -129,6 +130,7 @@ $killme->finish;
 # sending.
 ok( pump_until(
        $monitor,
+       $psql_timeout,
        \$monitor_stderr,
        qr/WARNING:  terminating connection because of crash of another server process|server closed the connection unexpectedly|connection to server was lost|could not send data to server/m
    ),
@@ -151,7 +153,7 @@ $monitor->run();
 $killme_stdin .= q[
 SELECT pg_backend_pid();
 ];
-ok(pump_until($killme, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
+ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
    "acquired pid for SIGKILL");
 $pid = $killme_stdout;
 chomp($pid);
@@ -164,7 +166,7 @@ INSERT INTO alive VALUES($$committed-before-sigkill$$) RETURNING status;
 BEGIN;
 INSERT INTO alive VALUES($$in-progress-before-sigkill$$) RETURNING status;
 ];
-ok(pump_until($killme, \$killme_stdout, qr/in-progress-before-sigkill/m),
+ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/in-progress-before-sigkill/m),
    'inserted in-progress-before-sigkill');
 $killme_stdout = '';
 $killme_stderr = '';
@@ -176,7 +178,7 @@ $monitor_stdin .= q[
 SELECT $$psql-connected$$;
 SELECT pg_sleep(3600);
 ];
-ok(pump_until($monitor, \$monitor_stdout, qr/psql-connected/m),
+ok(pump_until($monitor, $psql_timeout, \$monitor_stdout, qr/psql-connected/m),
    'monitor connected');
 $monitor_stdout = '';
 $monitor_stderr = '';
@@ -194,6 +196,7 @@ SELECT 1;
 ];
 ok( pump_until(
        $killme,
+       $psql_timeout,
        \$killme_stderr,
        qr/server closed the connection unexpectedly|connection to server was lost|could not send data to server/m
    ),
@@ -205,6 +208,7 @@ $killme->finish;
 # sending.
 ok( pump_until(
        $monitor,
+       $psql_timeout,
        \$monitor_stderr,
        qr/WARNING:  terminating connection because of crash of another server process|server closed the connection unexpectedly|connection to server was lost|could not send data to server/m
    ),
@@ -242,33 +246,3 @@ is( $node->safe_psql(
    'can still write after orderly restart');
 
 $node->stop();
-
-# Pump until string is matched, or timeout occurs
-sub pump_until
-{
-   my ($proc, $stream, $untl) = @_;
-   $proc->pump_nb();
-   while (1)
-   {
-       last if $$stream =~ /$untl/;
-       if ($psql_timeout->is_expired)
-       {
-           diag("aborting wait: program timed out");
-           diag("stream contents: >>", $$stream, "<<");
-           diag("pattern searched for: ", $untl);
-
-           return 0;
-       }
-       if (not $proc->pumpable())
-       {
-           diag("aborting wait: program died");
-           diag("stream contents: >>", $$stream, "<<");
-           diag("pattern searched for: ", $untl);
-
-           return 0;
-       }
-       $proc->pump();
-   }
-   return 1;
-
-}
index 5ddc00fb05f306916d38d8766878679b1560bb69..b0f5ba04d90413ad44a4b54890bc3a9dd1c3952e 100644 (file)
@@ -58,7 +58,7 @@ my $killme = IPC::Run::start(
 $killme_stdin .= q[
 SELECT pg_backend_pid();
 ];
-ok(pump_until($killme, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
+ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
    'acquired pid for SIGKILL');
 my $pid = $killme_stdout;
 chomp($pid);
@@ -87,7 +87,7 @@ BEGIN;
 INSERT INTO tab_crash (a) VALUES(1);
 SELECT $$insert-tuple-to-lock-next-insert$$;
 ];
-pump_until($killme2, \$killme_stdout2, qr/insert-tuple-to-lock-next-insert/m);
+pump_until($killme2, $psql_timeout, \$killme_stdout2, qr/insert-tuple-to-lock-next-insert/m);
 $killme_stdout2 = '';
 $killme_stderr2 = '';
 
@@ -100,7 +100,7 @@ BEGIN;
 SELECT $$in-progress-before-sigkill$$;
 INSERT INTO tab_crash (a) SELECT i FROM generate_series(1, 5000) s(i);
 ];
-ok(pump_until($killme, \$killme_stdout, qr/in-progress-before-sigkill/m),
+ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/in-progress-before-sigkill/m),
    'insert in-progress-before-sigkill');
 $killme_stdout = '';
 $killme_stderr = '';
@@ -122,7 +122,7 @@ END; $c$;
 SELECT $$insert-tuple-lock-waiting$$;
 ];
 
-pump_until($killme2, \$killme_stdout2, qr/insert-tuple-lock-waiting/m);
+pump_until($killme2, $psql_timeout, \$killme_stdout2, qr/insert-tuple-lock-waiting/m);
 $killme_stdout2 = '';
 $killme_stderr2 = '';
 
@@ -171,7 +171,7 @@ $killme->run();
 $killme_stdin .= q[
 SELECT pg_backend_pid();
 ];
-ok(pump_until($killme, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
+ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
    'acquired pid for SIGKILL');
 $pid = $killme_stdout;
 chomp($pid);
@@ -188,7 +188,7 @@ BEGIN;
 INSERT INTO tab_crash (a) VALUES(1);
 SELECT $$insert-tuple-to-lock-next-insert$$;
 ];
-pump_until($killme2, \$killme_stdout2, qr/insert-tuple-to-lock-next-insert/m);
+pump_until($killme2, $psql_timeout, \$killme_stdout2, qr/insert-tuple-to-lock-next-insert/m);
 $killme_stdout2 = '';
 $killme_stderr2 = '';
 
@@ -201,7 +201,7 @@ BEGIN;
 SELECT $$in-progress-before-sigkill$$;
 INSERT INTO tab_crash (a) SELECT i FROM generate_series(1, 5000) s(i);
 ];
-ok(pump_until($killme, \$killme_stdout, qr/in-progress-before-sigkill/m),
+ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/in-progress-before-sigkill/m),
    'insert in-progress-before-sigkill');
 $killme_stdout = '';
 $killme_stderr = '';
@@ -223,7 +223,7 @@ END; $c$;
 SELECT $$insert-tuple-lock-waiting$$;
 ];
 
-pump_until($killme2, \$killme_stdout2, qr/insert-tuple-lock-waiting/m);
+pump_until($killme2, $psql_timeout, \$killme_stdout2, qr/insert-tuple-lock-waiting/m);
 $killme_stdout2 = '';
 $killme_stderr2 = '';
 
@@ -266,32 +266,3 @@ is( $node->safe_psql(
    'temporary file was removed');
 
 $node->stop();
-
-# Pump until string is matched, or timeout occurs
-sub pump_until
-{
-   my ($proc, $stream, $untl) = @_;
-   $proc->pump_nb();
-   while (1)
-   {
-       last if $$stream =~ /$untl/;
-       if ($psql_timeout->is_expired)
-       {
-           diag("aborting wait: program timed out");
-           diag("stream contents: >>", $$stream, "<<");
-           diag("pattern searched for: ", $untl);
-
-           return 0;
-       }
-       if (not $proc->pumpable())
-       {
-           diag("aborting wait: program died");
-           diag("stream contents: >>", $$stream, "<<");
-           diag("pattern searched for: ", $untl);
-
-           return 0;
-       }
-       $proc->pump();
-   }
-   return 1;
-}