Commit 7fa95bb0 authored by Andres Freund's avatar Andres Freund

Backpatch addition of pump_until() more completely.

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
f74496dd (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
parent 66ca1427
...@@ -74,7 +74,7 @@ CREATE TABLE alive(status text); ...@@ -74,7 +74,7 @@ CREATE TABLE alive(status text);
INSERT INTO alive VALUES($$committed-before-sigquit$$); INSERT INTO alive VALUES($$committed-before-sigquit$$);
SELECT pg_backend_pid(); 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'); 'acquired pid for SIGQUIT');
my $pid = $killme_stdout; my $pid = $killme_stdout;
chomp($pid); chomp($pid);
...@@ -86,7 +86,7 @@ $killme_stdin .= q[ ...@@ -86,7 +86,7 @@ $killme_stdin .= q[
BEGIN; BEGIN;
INSERT INTO alive VALUES($$in-progress-before-sigquit$$) RETURNING status; 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'); 'inserted in-progress-before-sigquit');
$killme_stdout = ''; $killme_stdout = '';
$killme_stderr = ''; $killme_stderr = '';
...@@ -99,7 +99,7 @@ $monitor_stdin .= q[ ...@@ -99,7 +99,7 @@ $monitor_stdin .= q[
SELECT $$psql-connected$$; SELECT $$psql-connected$$;
SELECT pg_sleep(3600); 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 connected');
$monitor_stdout = ''; $monitor_stdout = '';
$monitor_stderr = ''; $monitor_stderr = '';
...@@ -116,6 +116,7 @@ SELECT 1; ...@@ -116,6 +116,7 @@ SELECT 1;
]; ];
ok( pump_until( ok( pump_until(
$killme, $killme,
$psql_timeout,
\$killme_stderr, \$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 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; ...@@ -129,6 +130,7 @@ $killme->finish;
# sending. # sending.
ok( pump_until( ok( pump_until(
$monitor, $monitor,
$psql_timeout,
\$monitor_stderr, \$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 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(); ...@@ -151,7 +153,7 @@ $monitor->run();
$killme_stdin .= q[ $killme_stdin .= q[
SELECT pg_backend_pid(); 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"); "acquired pid for SIGKILL");
$pid = $killme_stdout; $pid = $killme_stdout;
chomp($pid); chomp($pid);
...@@ -164,7 +166,7 @@ INSERT INTO alive VALUES($$committed-before-sigkill$$) RETURNING status; ...@@ -164,7 +166,7 @@ INSERT INTO alive VALUES($$committed-before-sigkill$$) RETURNING status;
BEGIN; BEGIN;
INSERT INTO alive VALUES($$in-progress-before-sigkill$$) RETURNING status; 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'); 'inserted in-progress-before-sigkill');
$killme_stdout = ''; $killme_stdout = '';
$killme_stderr = ''; $killme_stderr = '';
...@@ -176,7 +178,7 @@ $monitor_stdin .= q[ ...@@ -176,7 +178,7 @@ $monitor_stdin .= q[
SELECT $$psql-connected$$; SELECT $$psql-connected$$;
SELECT pg_sleep(3600); 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 connected');
$monitor_stdout = ''; $monitor_stdout = '';
$monitor_stderr = ''; $monitor_stderr = '';
...@@ -194,6 +196,7 @@ SELECT 1; ...@@ -194,6 +196,7 @@ SELECT 1;
]; ];
ok( pump_until( ok( pump_until(
$killme, $killme,
$psql_timeout,
\$killme_stderr, \$killme_stderr,
qr/server closed the connection unexpectedly|connection to server was lost|could not send data to server/m qr/server closed the connection unexpectedly|connection to server was lost|could not send data to server/m
), ),
...@@ -205,6 +208,7 @@ $killme->finish; ...@@ -205,6 +208,7 @@ $killme->finish;
# sending. # sending.
ok( pump_until( ok( pump_until(
$monitor, $monitor,
$psql_timeout,
\$monitor_stderr, \$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 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( ...@@ -242,33 +246,3 @@ is( $node->safe_psql(
'can still write after orderly restart'); 'can still write after orderly restart');
$node->stop(); $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;
}
...@@ -58,7 +58,7 @@ my $killme = IPC::Run::start( ...@@ -58,7 +58,7 @@ my $killme = IPC::Run::start(
$killme_stdin .= q[ $killme_stdin .= q[
SELECT pg_backend_pid(); 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'); 'acquired pid for SIGKILL');
my $pid = $killme_stdout; my $pid = $killme_stdout;
chomp($pid); chomp($pid);
...@@ -87,7 +87,7 @@ BEGIN; ...@@ -87,7 +87,7 @@ BEGIN;
INSERT INTO tab_crash (a) VALUES(1); INSERT INTO tab_crash (a) VALUES(1);
SELECT $$insert-tuple-to-lock-next-insert$$; 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_stdout2 = '';
$killme_stderr2 = ''; $killme_stderr2 = '';
...@@ -100,7 +100,7 @@ BEGIN; ...@@ -100,7 +100,7 @@ BEGIN;
SELECT $$in-progress-before-sigkill$$; SELECT $$in-progress-before-sigkill$$;
INSERT INTO tab_crash (a) SELECT i FROM generate_series(1, 5000) s(i); 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'); 'insert in-progress-before-sigkill');
$killme_stdout = ''; $killme_stdout = '';
$killme_stderr = ''; $killme_stderr = '';
...@@ -122,7 +122,7 @@ END; $c$; ...@@ -122,7 +122,7 @@ END; $c$;
SELECT $$insert-tuple-lock-waiting$$; 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_stdout2 = '';
$killme_stderr2 = ''; $killme_stderr2 = '';
...@@ -171,7 +171,7 @@ $killme->run(); ...@@ -171,7 +171,7 @@ $killme->run();
$killme_stdin .= q[ $killme_stdin .= q[
SELECT pg_backend_pid(); 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'); 'acquired pid for SIGKILL');
$pid = $killme_stdout; $pid = $killme_stdout;
chomp($pid); chomp($pid);
...@@ -188,7 +188,7 @@ BEGIN; ...@@ -188,7 +188,7 @@ BEGIN;
INSERT INTO tab_crash (a) VALUES(1); INSERT INTO tab_crash (a) VALUES(1);
SELECT $$insert-tuple-to-lock-next-insert$$; 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_stdout2 = '';
$killme_stderr2 = ''; $killme_stderr2 = '';
...@@ -201,7 +201,7 @@ BEGIN; ...@@ -201,7 +201,7 @@ BEGIN;
SELECT $$in-progress-before-sigkill$$; SELECT $$in-progress-before-sigkill$$;
INSERT INTO tab_crash (a) SELECT i FROM generate_series(1, 5000) s(i); 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'); 'insert in-progress-before-sigkill');
$killme_stdout = ''; $killme_stdout = '';
$killme_stderr = ''; $killme_stderr = '';
...@@ -223,7 +223,7 @@ END; $c$; ...@@ -223,7 +223,7 @@ END; $c$;
SELECT $$insert-tuple-lock-waiting$$; 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_stdout2 = '';
$killme_stderr2 = ''; $killme_stderr2 = '';
...@@ -266,32 +266,3 @@ is( $node->safe_psql( ...@@ -266,32 +266,3 @@ is( $node->safe_psql(
'temporary file was removed'); 'temporary file was removed');
$node->stop(); $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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment