[Pkg-postgresql-public] Bug#756008: postgresql-common: pg_upgradecluster 9.3 -> 9.4 fails
Johannes Truschnigg
johannes.truschnigg at geizhals.at
Wed Aug 19 11:56:04 UTC 2015
This exact problem, together with an undocumented and obscure
5-seconds-timeout in pg_upgradecluster's invocation of `pg_ctlcluster
stop`, nearly made me pull my hair out yesterday.
I successfully tested the planned upgrade from 9.0 to 9.4 in the staging
environment, but because the live database requires more than 5 seconds
to properly shutdown, pg_upgradecluster died very early with a
nondescript error message, costing me more than an hour hunting down
thesource of the problem while production was suffering a scheduled, yet
prolonged downtime. The following was its death note:
---- >8 ----
Stopping old cluster...
pg_ctl: server does not shut down
Error: Could not stop old cluster
---- 8< ----
After some frantic digging, I solved the problem by temporarily
monkey-patching /usr/bin/pg_upgradecluster to stop the old cluster like
presented below:
---- >8 ----
# stopping old cluster, so that we notice early when there are still
# connections
if ($info{'running'}) {
get_encoding $version, $cluster;
print "Stopping old cluster...\n";
my @argv = ('pg_ctlcluster', $version, $cluster, 'stop', '-m',
'fast', '--');
push @argv, ('-t', '30') if $version >= '8.4';
error "Could not stop old cluster" if system @argv;
}
---- 8< ----
I'm not sure what the reason for the (original; I changed it to 30 to
get it to work with our setup and workload) 5s timeout being there is
(and I don't think that "trick" with passing additional argv elements
after a double-dash down to pg_upgrade is documented anywhere?!); maybe
it should just get removed instead of relying on total guesswork about
how long it could take to stop a user's cluster (esp. in the default
"smart" mode, 5s seems VERY unlikely for busy servers).
Thanks very much for taking note of this problem, and trying to help fix it!
--
Mit freundlichen Grüßen
Johannes Truschnigg
Senior System Administrator
--
mailto:johannes.truschnigg at geizhals.at (in dringenden Fällen bitte an
info at geizhals.at)
Geizhals(R) - Preisvergleich Internet Services AG
Obere Donaustrasse 63/2
A-1020 Wien
Tel: +43 1 5811609/87
Fax: +43 1 5811609/55
http://geizhals.at => Preisvergleich für Österreich
http://geizhals.de => Preisvergleich für Deutschland
http://geizhals.eu => Preisvergleich EU-weit
Handelsgericht Wien | FN 197241K | Firmensitz Wien
More information about the Pkg-postgresql-public
mailing list