postgres.git / summary / log / commit / refs

commit    f97664cf54a2e1bf7d727b1c86b1d9b41e1eaba6
Author:   Noah Misch <noah@leadboat.com>
Date:     Thu Feb 11 01:34:02 2016 +0000

    Accept pg_ctl timeout from the PGCTLTIMEOUT environment variable.
    
    Many automated test suites call pg_ctl.  Buildfarm members axolotl,
    hornet, mandrill, shearwater, sungazer and tern have failed when server
    shutdown took longer than the pg_ctl default 60s timeout.  This addition
    permits slow hosts to easily raise the timeout without us editing a
    --timeout argument into every test suite pg_ctl call.  Back-patch to 9.1
    (all supported versions) for the sake of automated testing.
    
    Reviewed by Tom Lane.


doc/src/sgml/ref/pg_ctl-ref.sgml | 15 ++++++++++++++- src/bin/pg_ctl/pg_ctl.c | 10 +++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/ref/pg_ctl-ref.sgml b/doc/src/sgml/ref/pg_ctl-ref.sgml index 07836e718f7..d6953252f9b 100644 --- a/doc/src/sgml/ref/pg_ctl-ref.sgml +++ b/doc/src/sgml/ref/pg_ctl-ref.sgml @@ -351,7 +351,9 @@ PostgreSQL documentation <listitem> <para> The maximum number of seconds to wait when waiting for startup or - shutdown to complete. The default is 60 seconds. + shutdown to complete. Defaults to the value of the + <envar>PGCTLTIMEOUT</> environment variable or, if not set, to 60 + seconds. </para> </listitem> </varlistentry> @@ -437,6 +439,17 @@ PostgreSQL documentation <title>Environment</title> <variablelist> + <varlistentry> + <term><envar>PGCTLTIMEOUT</envar></term> + + <listitem> + <para> + Default limit on the number of seconds to wait when waiting for startup + or shutdown to complete. If not set, the default is 60 seconds. + </para> + </listitem> + </varlistentry> + <varlistentry> <term><envar>PGDATA</envar></term> diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c index 977f947b854..d90f24e7277 100644 --- a/src/bin/pg_ctl/pg_ctl.c +++ b/src/bin/pg_ctl/pg_ctl.c @@ -80,6 +80,7 @@ typedef enum static bool do_wait = false; static bool wait_set = false; static int wait_seconds = DEFAULT_WAIT; +static bool wait_seconds_arg = false; static bool silent_mode = false; static ShutdownMode shutdown_mode = SMART_MODE; static int sig = SIGTERM; /* default */ @@ -1362,7 +1363,8 @@ pgwin32_CommandLine(bool registration) if (registration && do_wait) appendPQExpBuffer(cmdLine, " -w"); - if (registration && wait_seconds != DEFAULT_WAIT) + /* Don't propagate a value from an environment variable. */ + if (registration && wait_seconds_arg && wait_seconds != DEFAULT_WAIT) appendPQExpBuffer(cmdLine, " -t %d", wait_seconds); if (registration && silent_mode) @@ -2151,6 +2153,7 @@ main(int argc, char **argv) {NULL, 0, NULL, 0} }; + char *env_wait; int option_index; int c; pgpid_t killproc = 0; @@ -2202,6 +2205,10 @@ main(int argc, char **argv) } #endif + env_wait = getenv("PGCTLTIMEOUT"); + if (env_wait != NULL) + wait_seconds = atoi(env_wait); + /* * 'Action' can be before or after args so loop over both. Some * getopt_long() implementations will reorder argv[] to place all flags @@ -2271,6 +2278,7 @@ main(int argc, char **argv) break; case 't': wait_seconds = atoi(optarg); + wait_seconds_arg = true; break; case 'U': if (strchr(optarg, '\\')) [parent: e56acbe2a3d9]