mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Backpatch addition of pump_until() more completely.
Ina2ab9c06ea
I just backpatched the introduction of pump_until(), without changing the existing local definitions (as6da65a3f9a
). 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 beforef74496dd61
(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
This commit is contained in:
@ -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;
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user