Honor PGCTLTIMEOUT environment variable for pg_regress' startup wait.

In commit 2ffa869620 we made pg_ctl recognize an environment variable
PGCTLTIMEOUT to set the default timeout for starting and stopping the
postmaster.  However, pg_regress uses pg_ctl only for the "stop" end of
that; it has bespoke code for starting the postmaster, and that code has
historically had a hard-wired 60-second timeout.  Further buildfarm
experience says it'd be a good idea if that timeout were also controlled
by PGCTLTIMEOUT, so let's make it so.  Like the previous patch, back-patch
to all active branches.

Discussion: <13969.1461191936@sss.pgh.pa.us>
This commit is contained in:
Tom Lane 2016-04-20 23:48:13 -04:00
parent b4e0f18382
commit cbabb70f35
1 changed files with 21 additions and 6 deletions

View File

@ -2185,6 +2185,8 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
if (temp_instance)
{
FILE *pg_conf;
const char *env_wait;
int wait_seconds;
/*
* Prepare the temp instance
@ -2335,11 +2337,23 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
}
/*
* Wait till postmaster is able to accept connections (normally only a
* second or so, but Cygwin is reportedly *much* slower). Don't wait
* forever, however.
* Wait till postmaster is able to accept connections; normally this
* is only a second or so, but Cygwin is reportedly *much* slower, and
* test builds using Valgrind or similar tools might be too. Hence,
* allow the default timeout of 60 seconds to be overridden from the
* PGCTLTIMEOUT environment variable.
*/
for (i = 0; i < 60; i++)
env_wait = getenv("PGCTLTIMEOUT");
if (env_wait != NULL)
{
wait_seconds = atoi(env_wait);
if (wait_seconds <= 0)
wait_seconds = 60;
}
else
wait_seconds = 60;
for (i = 0; i < wait_seconds; i++)
{
/* Done if psql succeeds */
if (system(buf2) == 0)
@ -2360,9 +2374,10 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
pg_usleep(1000000L);
}
if (i >= 60)
if (i >= wait_seconds)
{
fprintf(stderr, _("\n%s: postmaster did not respond within 60 seconds\nExamine %s/log/postmaster.log for the reason\n"), progname, outputdir);
fprintf(stderr, _("\n%s: postmaster did not respond within %d seconds\nExamine %s/log/postmaster.log for the reason\n"),
progname, wait_seconds, outputdir);
/*
* If we get here, the postmaster is probably wedged somewhere in