From cbabb70f35bb0e5bac84b9f15ecadc82868ad9f9 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 20 Apr 2016 23:48:13 -0400 Subject: [PATCH] Honor PGCTLTIMEOUT environment variable for pg_regress' startup wait. In commit 2ffa86962077c588 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> --- src/test/regress/pg_regress.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c index 2f6f56dd40..574f5b87be 100644 --- a/src/test/regress/pg_regress.c +++ b/src/test/regress/pg_regress.c @@ -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