diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2024-11-14 16:12:04 +0200 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2024-11-14 16:12:04 +0200 |
commit | bb861414fea31073f27aaab75a0ceaf3638d7985 (patch) | |
tree | 693850f21bff362d67ca7276d8cb73245653ae3f /src/test/perl/PostgreSQL/Test/Cluster.pm | |
parent | 18d67a8d7d30884655d65910b82781d9360819a6 (diff) | |
download | postgresql-bb861414fea31073f27aaab75a0ceaf3638d7985.tar.gz postgresql-bb861414fea31073f27aaab75a0ceaf3638d7985.zip |
Kill dead-end children when there's nothing else left
Previously, the postmaster would never try to kill dead-end child
processes, even if there were no other processes left. A dead-end
backend will eventually exit, when authentication_timeout expires, but
if a dead-end backend is the only thing that's preventing the server
from shutting down, it seems better to kill it immediately. It's
particularly important, if there was a bug in the early startup code
that prevented a dead-end child from timing out and exiting normally.
Includes a test for that case where a dead-end backend previously
prevented the server from shutting down.
Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://www.postgresql.org/message-id/a102f15f-eac4-4ff2-af02-f9ff209ec66f@iki.fi
Diffstat (limited to 'src/test/perl/PostgreSQL/Test/Cluster.pm')
-rw-r--r-- | src/test/perl/PostgreSQL/Test/Cluster.pm | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/test/perl/PostgreSQL/Test/Cluster.pm b/src/test/perl/PostgreSQL/Test/Cluster.pm index e5526c7565f..508e5e3917a 100644 --- a/src/test/perl/PostgreSQL/Test/Cluster.pm +++ b/src/test/perl/PostgreSQL/Test/Cluster.pm @@ -1194,6 +1194,9 @@ this to fail. Otherwise, tests might fail to detect server crashes. With optional extra param fail_ok => 1, returns 0 for failure instead of bailing out. +The optional extra param timeout can be used to pass the pg_ctl +--timeout option. + =cut sub stop @@ -1209,8 +1212,11 @@ sub stop return 1 unless defined $self->{_pid}; print "### Stopping node \"$name\" using mode $mode\n"; - $ret = PostgreSQL::Test::Utils::system_log('pg_ctl', '-D', $pgdata, - '-m', $mode, 'stop'); + my @cmd = ('pg_ctl', '-D', $pgdata, '-m', $mode, 'stop'); + if ($params{timeout}) { + push(@cmd, ('--timeout', $params{timeout})); + } + $ret = PostgreSQL::Test::Utils::system_log(@cmd); if ($ret != 0) { |