aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2016-04-20 23:48:13 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2016-04-20 23:48:13 -0400
commitcbabb70f35bb0e5bac84b9f15ecadc82868ad9f9 (patch)
treeed69fa49d093392205851022e1b65ee89ab5125b
parentb4e0f183826e85fd43248d5047eddf393c3d8a30 (diff)
downloadpostgresql-cbabb70f35bb0e5bac84b9f15ecadc82868ad9f9.tar.gz
postgresql-cbabb70f35bb0e5bac84b9f15ecadc82868ad9f9.zip
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>
-rw-r--r--src/test/regress/pg_regress.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index 2f6f56dd40f..574f5b87bee 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