From: Peter Eisentraut <peter_e@gmx.net>
To: pgsql-hackers <pgsql-hackers@postgresql.org>
Cc: Fabien COELHO <coelho@cri.ensmp.fr>
Subject: Re: improving speed of make check-world
Date: Sat, 14 Feb 2015 21:01:48 -0500
Message-ID: <54DFFE0C.4060100@gmx.net> (raw)
In-Reply-To: <alpine.DEB.2.10.1408311125080.14824@sto>
References: <53ED9E6C.1080700@gmx.net>
<alpine.DEB.2.10.1408311125080.14824@sto>
List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
On 8/31/14 5:36 AM, Fabien COELHO wrote:
> Running "make -j2 check-world" does not work because "initdb" is not
> found by "pg_regress". but "make -j1 check-world" does work fine. It
> seems that some dependencies might be missing and there is a race
> condition between temporary install and running some checks?? Maybe it
> is not expected to work anyway? See below suggestions to make it work.
Here is an updated patch that fixes this problem.
The previous problem was simply a case were the make rules were not
parallel-safe.
For recursive make, we (through magic) set up targets like this:
check: check-subdir1-check check-subdir2-check
And with my old patch we added
check: temp-install
So the aggregate prerequisites were in effect something like
check: check-subdir1-check check-subdir2-check temp-install
And so there was nothing stopping a parallel make to descend into the
subdirectories before the temp install was set up.
What we need is additional prerequisites like
check-subdir1-check check-subdir2-check: temp-install
I have hacked this directly into the $(recurse) function, which is ugly.
This could possibly be improved somehow, but the effect would be the
same in any case.
With this, I can now run things like
make -C src/pl check -j3
make -C src/bin check -j8
A full make check-world -j$X is still prone to fail because some test
suites can't run in parallel with others, but that's a separate problem
to fix.
Note: We have in the meantime added logic to pg_regress to clean up the
temporary installation after the run. This changes that because
pg_regress is no longer responsible for the temporary installation.
pg_regress still cleans up the temporary data directory, so you still
get quite a bit of space savings. But the temporary installation is not
cleaned up. But since we would now only use a single temporary
installation, the disk space usage still stays in the same order of
magnitude.
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackersAttachments:regress-temp-instance-v3.patch (text/x-patch, 31.0K) downloaddiff --git a/.gitignore b/.gitignoreindex 715f817..77feb4c 100644--- a/.gitignore+++ b/.gitignore@@ -35,3 +35,4 @@ lib*.pc
/pgsql.sln.cache
/Debug/
/Release/
+/tmp_install/diff --git a/GNUmakefile.in b/GNUmakefile.inindex 69e0824..361897a 100644--- a/GNUmakefile.in+++ b/GNUmakefile.in@@ -47,6 +47,7 @@ $(call recurse,distprep,doc src config contrib)
# it's not built by default
$(call recurse,clean,doc contrib src config)
clean:
+ rm -rf tmp_install/
# Garbage from autoconf:
@rm -rf autom4te.cache/
diff --git a/contrib/earthdistance/Makefile b/contrib/earthdistance/Makefileindex 93dcbe3..cde1ae6 100644--- a/contrib/earthdistance/Makefile+++ b/contrib/earthdistance/Makefile@@ -7,7 +7,7 @@ DATA = earthdistance--1.0.sql earthdistance--unpackaged--1.0.sql
PGFILEDESC = "earthdistance - calculate distances on the surface of the Earth"
REGRESS = earthdistance
-REGRESS_OPTS = --extra-install=contrib/cube+EXTRA_INSTALL = contrib/cube
LDFLAGS_SL += $(filter -lm, $(LIBS))
diff --git a/contrib/pg_upgrade/test.sh b/contrib/pg_upgrade/test.shindex 75b6357..3012ed0 100644--- a/contrib/pg_upgrade/test.sh+++ b/contrib/pg_upgrade/test.sh@@ -87,7 +87,7 @@ if [ "$1" = '--install' ]; then
# use psql from the proper installation directory, which might
# be outdated or missing. But don't override anything else that's
# already in EXTRA_REGRESS_OPTS.
- EXTRA_REGRESS_OPTS="$EXTRA_REGRESS_OPTS --psqldir='$bindir'"+ EXTRA_REGRESS_OPTS="$EXTRA_REGRESS_OPTS --bindir='$bindir'"
export EXTRA_REGRESS_OPTS
fi
diff --git a/contrib/test_decoding/Makefile b/contrib/test_decoding/Makefileindex 438be44..613e9c3 100644--- a/contrib/test_decoding/Makefile+++ b/contrib/test_decoding/Makefile@@ -39,35 +39,33 @@ submake-test_decoding:
REGRESSCHECKS=ddl rewrite toast permissions decoding_in_xact decoding_into_rel binary prepared
-regresscheck: all | submake-regress submake-test_decoding+regresscheck: all | submake-regress submake-test_decoding temp-install
$(MKDIR_P) regression_output
$(pg_regress_check) \
--temp-config $(top_srcdir)/contrib/test_decoding/logical.conf \
- --temp-install=./tmp_check \- --extra-install=contrib/test_decoding \+ --temp-instance=./tmp_check \
--outputdir=./regression_output \
$(REGRESSCHECKS)
-regresscheck-install-force: | submake-regress submake-test_decoding+regresscheck-install-force: | submake-regress submake-test_decoding temp-install
$(pg_regress_installcheck) \
- --extra-install=contrib/test_decoding \
$(REGRESSCHECKS)
ISOLATIONCHECKS=mxact delayed_startup ondisk_startup concurrent_ddl_dml
-isolationcheck: all | submake-isolation submake-test_decoding+isolationcheck: all | submake-isolation submake-test_decoding temp-install
$(MKDIR_P) isolation_output
$(pg_isolation_regress_check) \
--temp-config $(top_srcdir)/contrib/test_decoding/logical.conf \
- --extra-install=contrib/test_decoding \
--outputdir=./isolation_output \
$(ISOLATIONCHECKS)
-isolationcheck-install-force: all | submake-isolation submake-test_decoding+isolationcheck-install-force: all | submake-isolation submake-test_decoding temp-install
$(pg_isolation_regress_installcheck) \
- --extra-install=contrib/test_decoding \
$(ISOLATIONCHECKS)
PHONY: submake-test_decoding submake-regress check \
regresscheck regresscheck-install-force \
isolationcheck isolationcheck-install-force
++temp-install: EXTRA_INSTALL=contrib/test_decodingdiff --git a/src/Makefile.global.in b/src/Makefile.global.inindex 7c39d82..435bea6 100644--- a/src/Makefile.global.in+++ b/src/Makefile.global.in@@ -43,6 +43,7 @@ MAJORVERSION = @PG_MAJORVERSION@
# (PGXS VPATH support is handled separately in pgxs.mk)
ifndef PGXS
vpath_build = @vpath_build@
+abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ifneq ($(vpath_build),yes)
@@ -300,6 +301,17 @@ BZIP2 = bzip2
# Testing
+check: temp-install++.PHONY: temp-install+temp-install:+ifeq ($(MAKELEVEL),0)+ rm -rf '$(abs_top_builddir)'/tmp_install+ $(MKDIR_P) '$(abs_top_builddir)'/tmp_install/log+ $(MAKE) -C '$(top_builddir)' DESTDIR='$(abs_top_builddir)'/tmp_install install >'$(abs_top_builddir)'/tmp_install/log/install.log 2>&1+endif+ for extra in $(EXTRA_INSTALL); do $(MAKE) -C '$(top_builddir)'/$$extra DESTDIR='$(abs_top_builddir)'/tmp_install install >>'$(abs_top_builddir)'/tmp_install/log/install.log 2>&1 || exit; done+
PROVE = @PROVE@
PG_PROVE_FLAGS = -I $(top_srcdir)/src/test/perl/
PROVE_FLAGS = --verbose
@@ -314,6 +326,10 @@ define ld_library_path_var
$(if $(filter $(PORTNAME),darwin),DYLD_LIBRARY_PATH,$(if $(filter $(PORTNAME),aix),LIBPATH,LD_LIBRARY_PATH))
endef
+define with_temp_install+PATH="$(abs_top_builddir)/tmp_install$(bindir):$$PATH" $(call add_to_path,$(ld_library_path_var),$(abs_top_builddir)/tmp_install$(libdir))+endef+
ifeq ($(enable_tap_tests),yes)
define prove_installcheck
@@ -321,9 +337,7 @@ cd $(srcdir) && TESTDIR='$(CURDIR)' PATH="$(bindir):$$PATH" PGPORT='6$(DEF_PGPOR
endef
define prove_check
-$(MKDIR_P) tmp_check/log-$(MAKE) -C $(top_builddir) DESTDIR='$(CURDIR)'/tmp_check/install install >'$(CURDIR)'/tmp_check/log/install.log 2>&1-cd $(srcdir) && TESTDIR='$(CURDIR)' PATH="$(CURDIR)/tmp_check/install$(bindir):$$PATH" $(call add_to_path,$(ld_library_path_var),$(CURDIR)/tmp_check/install$(libdir)) top_builddir='$(CURDIR)/$(top_builddir)' PGPORT='6$(DEF_PGPORT)' $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) t/*.pl+cd $(srcdir) && TESTDIR='$(CURDIR)' $(with_temp_install) PGPORT='6$(DEF_PGPORT)' top_builddir='$(CURDIR)/$(top_builddir)' $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) t/*.pl
endef
else
@@ -494,13 +508,13 @@ endif
pg_regress_locale_flags = $(if $(ENCODING),--encoding=$(ENCODING)) $(NOLOCALE)
-pg_regress_check = $(top_builddir)/src/test/regress/pg_regress --inputdir=$(srcdir) --temp-install=./tmp_check --top-builddir=$(top_builddir) $(pg_regress_locale_flags) $(EXTRA_REGRESS_OPTS)-pg_regress_installcheck = $(top_builddir)/src/test/regress/pg_regress --inputdir=$(srcdir) --psqldir='$(PSQLDIR)' $(pg_regress_locale_flags) $(EXTRA_REGRESS_OPTS)+pg_regress_check = $(with_temp_install) $(top_builddir)/src/test/regress/pg_regress --inputdir=$(srcdir) --temp-instance=./tmp_check --bindir= $(pg_regress_locale_flags) $(EXTRA_REGRESS_OPTS)+pg_regress_installcheck = $(top_builddir)/src/test/regress/pg_regress --inputdir=$(srcdir) --bindir='$(bindir)' $(pg_regress_locale_flags) $(EXTRA_REGRESS_OPTS)
pg_regress_clean_files = results/ regression.diffs regression.out tmp_check/ log/
-pg_isolation_regress_check = $(top_builddir)/src/test/isolation/pg_isolation_regress --inputdir=$(srcdir) --temp-install=./tmp_check --top-builddir=$(top_builddir) $(pg_regress_locale_flags) $(EXTRA_REGRESS_OPTS)-pg_isolation_regress_installcheck = $(top_builddir)/src/test/isolation/pg_isolation_regress --inputdir=$(srcdir) --top-builddir=$(top_builddir) $(pg_regress_locale_flags) $(EXTRA_REGRESS_OPTS)+pg_isolation_regress_check = $(with_temp_install) $(top_builddir)/src/test/isolation/pg_isolation_regress --inputdir=$(srcdir) --temp-instance=./tmp_check --bindir= $(pg_regress_locale_flags) $(EXTRA_REGRESS_OPTS)+pg_isolation_regress_installcheck = $(top_builddir)/src/test/isolation/pg_isolation_regress --inputdir=$(srcdir) $(pg_regress_locale_flags) $(EXTRA_REGRESS_OPTS)
##########################################################################
#
@@ -679,7 +693,7 @@ endif
define _create_recursive_target
.PHONY: $(1)-$(2)-recurse
$(1): $(1)-$(2)-recurse
-$(1)-$(2)-recurse:+$(1)-$(2)-recurse: $(if $(filter check, $(3)), temp-install)
$$(MAKE) -C $(2) $(3)
endef
# Note that the use of $$ on the last line above is important; we want
diff --git a/src/interfaces/ecpg/test/Makefile b/src/interfaces/ecpg/test/Makefileindex 387729b..a4ac021 100644--- a/src/interfaces/ecpg/test/Makefile+++ b/src/interfaces/ecpg/test/Makefile@@ -11,14 +11,10 @@ override CPPFLAGS := \
'-I$(top_builddir)/src/port' \
'-I$(top_srcdir)/src/test/regress' \
'-DHOST_TUPLE="$(host_tuple)"' \
- '-DMAKEPROG="$(MAKE)"' \
'-DSHELLPROG="$(SHELL)"' \
'-DDLSUFFIX="$(DLSUFFIX)"' \
$(CPPFLAGS)
-# where to find psql for testing an existing installation-PSQLDIR = $(bindir)-
# default encoding for regression tests
ENCODING = SQL_ASCII
@@ -82,11 +78,11 @@ endif
REGRESS_OPTS = --dbname=regress1,connectdb --create-role=connectuser,connectdb $(EXTRA_REGRESS_OPTS)
check: all
- ./pg_regress $(REGRESS_OPTS) --top-builddir=$(top_builddir) --temp-install=./tmp_check $(pg_regress_locale_flags) $(THREAD) --schedule=$(srcdir)/ecpg_schedule+ $(with_temp_install) ./pg_regress $(REGRESS_OPTS) --temp-instance=./tmp_check --bindir= $(pg_regress_locale_flags) $(THREAD) --schedule=$(srcdir)/ecpg_schedule
# the same options, but with --listen-on-tcp
checktcp: all
- ./pg_regress $(REGRESS_OPTS) --top-builddir=$(top_builddir) --temp-install=./tmp_check $(pg_regress_locale_flags) $(THREAD) --schedule=$(srcdir)/ecpg_schedule_tcp --host=localhost+ $(with_temp_install) ./pg_regress $(REGRESS_OPTS) --temp-instance=./tmp_check --bindir= $(pg_regress_locale_flags) $(THREAD) --schedule=$(srcdir)/ecpg_schedule_tcp --host=localhost
installcheck: all
- ./pg_regress $(REGRESS_OPTS) --psqldir='$(PSQLDIR)' --top-builddir=$(top_builddir) $(pg_regress_locale_flags) $(THREAD) --schedule=$(srcdir)/ecpg_schedule+ ./pg_regress $(REGRESS_OPTS) --bindir='$(bindir)' $(pg_regress_locale_flags) $(THREAD) --schedule=$(srcdir)/ecpg_schedulediff --git a/src/makefiles/pgxs.mk b/src/makefiles/pgxs.mkindex 24ddba9..ea17b1c 100644--- a/src/makefiles/pgxs.mk+++ b/src/makefiles/pgxs.mk@@ -258,9 +258,6 @@ else
REGRESS_OPTS += --dbname=$(CONTRIB_TESTDB)
endif
-# where to find psql for running the tests-PSQLDIR = $(bindir)-
# When doing a VPATH build, must copy over the data files so that the
# driver script can find them. We have to use an absolute path for
# the targets, because otherwise make will try to locate the missing
@@ -295,7 +292,9 @@ check:
@echo 'Do "$(MAKE) install", then "$(MAKE) installcheck" instead.'
else
check: all submake $(REGRESS_PREP)
- $(pg_regress_check) --extra-install=$(subdir) $(REGRESS_OPTS) $(REGRESS)+ $(pg_regress_check) $(REGRESS_OPTS) $(REGRESS)++temp-install: EXTRA_INSTALL=$(subdir)
endif
endif # REGRESS
diff --git a/src/pl/plperl/GNUmakefile b/src/pl/plperl/GNUmakefileindex a04a2d3..2b69847 100644--- a/src/pl/plperl/GNUmakefile+++ b/src/pl/plperl/GNUmakefile@@ -69,8 +69,6 @@ ifeq ($(shell $(PERL) -V:usemultiplicity), usemultiplicity='define';)
REGRESS += plperl_plperlu
endif
endif
-# where to find psql for running the tests-PSQLDIR = $(bindir)
# where to find xsubpp for building XS.
XSUBPPDIR = $(shell $(PERL) -e 'use List::Util qw(first); print first { -r "$$_/ExtUtils/xsubpp" } @INC')
diff --git a/src/pl/plpython/Makefile b/src/pl/plpython/Makefileindex 430aa89..c58e56b 100644--- a/src/pl/plpython/Makefile+++ b/src/pl/plpython/Makefile@@ -115,9 +115,6 @@ REGRESS = \
REGRESS_PLPYTHON3_MANGLE := $(REGRESS)
-# where to find psql for running the tests-PSQLDIR = $(bindir)-
include $(top_srcdir)/src/Makefile.shlib
all: all-lib
diff --git a/src/pl/tcl/Makefile b/src/pl/tcl/Makefileindex 7ea0026..851e3c0 100644--- a/src/pl/tcl/Makefile+++ b/src/pl/tcl/Makefile@@ -45,8 +45,6 @@ DATA = pltcl.control pltcl--1.0.sql pltcl--unpackaged--1.0.sql \
REGRESS_OPTS = --dbname=$(PL_TESTDB) --load-extension=pltcl
REGRESS = pltcl_setup pltcl_queries
-# where to find psql for running the tests-PSQLDIR = $(bindir)
# Tcl on win32 ships with import libraries only for Microsoft Visual C++,
# which are not compatible with mingw gcc. Therefore we need to build a
diff --git a/src/test/isolation/Makefile b/src/test/isolation/Makefileindex a88257a..4577509 100644--- a/src/test/isolation/Makefile+++ b/src/test/isolation/Makefile@@ -9,9 +9,6 @@ subdir = src/test/isolation
top_builddir = ../../..
include $(top_builddir)/src/Makefile.global
-# where to find psql for testing an existing installation-PSQLDIR = $(bindir)-
override CPPFLAGS := -I$(srcdir) -I$(libpq_srcdir) -I$(srcdir)/../regress $(CPPFLAGS)
OBJS = specparse.o isolationtester.o $(WIN32RES)
@@ -55,17 +52,17 @@ maintainer-clean: distclean
rm -f specparse.c specscanner.c
installcheck: all
- ./pg_isolation_regress --psqldir='$(PSQLDIR)' $(EXTRA_REGRESS_OPTS) --inputdir=$(srcdir) --schedule=$(srcdir)/isolation_schedule+ ./pg_isolation_regress --bindir='$(bindir)' $(EXTRA_REGRESS_OPTS) --inputdir=$(srcdir) --schedule=$(srcdir)/isolation_schedule
check: all
- ./pg_isolation_regress --temp-install=./tmp_check --inputdir=$(srcdir) --top-builddir=$(top_builddir) $(EXTRA_REGRESS_OPTS) --schedule=$(srcdir)/isolation_schedule+ $(with_temp_install) ./pg_isolation_regress --temp-instance=./tmp_check --inputdir=$(srcdir) --bindir= $(EXTRA_REGRESS_OPTS) --schedule=$(srcdir)/isolation_schedule
# Versions of the check tests that include the prepared_transactions test
# It only makes sense to run these if set up to use prepared transactions,
# via TEMP_CONFIG for the check case, or via the postgresql.conf for the
# installcheck case.
-installcheck-prepared-txns: all- ./pg_isolation_regress --psqldir='$(PSQLDIR)' $(EXTRA_REGRESS_OPTS) --inputdir=$(srcdir) --schedule=$(srcdir)/isolation_schedule prepared-transactions+installcheck-prepared-txns: all temp-install+ ./pg_isolation_regress --bindir='$(bindir)' $(EXTRA_REGRESS_OPTS) --inputdir=$(srcdir) --schedule=$(srcdir)/isolation_schedule prepared-transactions-check-prepared-txns: all- ./pg_isolation_regress --temp-install=./tmp_check $(EXTRA_REGRESS_OPTS) --inputdir=$(srcdir) --top-builddir=$(top_builddir) --schedule=$(srcdir)/isolation_schedule prepared-transactions+check-prepared-txns: all temp-install+ ./pg_isolation_regress --temp-instance=./tmp_check $(EXTRA_REGRESS_OPTS) --inputdir=$(srcdir) --schedule=$(srcdir)/isolation_schedule prepared-transactionsdiff --git a/src/test/regress/GNUmakefile b/src/test/regress/GNUmakefileindex 110eb80..4d6849e 100644--- a/src/test/regress/GNUmakefile+++ b/src/test/regress/GNUmakefile@@ -23,9 +23,6 @@ ifdef TEMP_CONFIG
TEMP_CONF += --temp-config=$(TEMP_CONFIG)
endif
-# where to find psql for testing an existing installation-PSQLDIR = $(bindir)-
# maximum simultaneous connections for parallel tests
MAXCONNOPT =
ifdef MAX_CONNECTIONS
@@ -34,7 +31,6 @@ endif
# stuff to pass into build of pg_regress
EXTRADEFS = '-DHOST_TUPLE="$(host_tuple)"' \
- '-DMAKEPROG="$(MAKE)"' \
'-DSHELLPROG="$(SHELL)"' \
'-DDLSUFFIX="$(DLSUFFIX)"'
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.cindex 0de1af6..7ad4ee1 100644--- a/src/test/regress/pg_regress.c+++ b/src/test/regress/pg_regress.c@@ -44,25 +44,10 @@ typedef struct _resultmap
} _resultmap;
/*
- * Values obtained from pg_config_paths.h and Makefile. The PG installation- * paths are only used in temp_install mode: we use these strings to find- * out where "make install" will put stuff under the temp_install directory.- * In non-temp_install mode, the only thing we need is the location of psql,- * which we expect to find in psqldir, or in the PATH if psqldir isn't given.- *- * XXX Because pg_regress is not installed in bindir, we can't support- * this for relocatable trees as it is. --psqldir would need to be- * specified in those cases.+ * Values obtained from Makefile.
*/
-char *bindir = PGBINDIR;-char *libdir = LIBDIR;-char *datadir = PGSHAREDIR;
char *host_platform = HOST_TUPLE;
-#ifndef WIN32_ONLY_COMPILER-static char *makeprog = MAKEPROG;-#endif-
#ifndef WIN32 /* not used in WIN32 case */
static char *shellprog = SHELLPROG;
#endif
@@ -85,7 +70,7 @@ _stringlist *dblist = NULL;
bool debug = false;
char *inputdir = ".";
char *outputdir = ".";
-char *psqldir = PGBINDIR;+char *bindir = PGBINDIR;
char *launcher = NULL;
static _stringlist *loadlanguage = NULL;
static _stringlist *loadextension = NULL;
@@ -93,9 +78,8 @@ static int max_connections = 0;
static char *encoding = NULL;
static _stringlist *schedulelist = NULL;
static _stringlist *extra_tests = NULL;
-static char *temp_install = NULL;+static char *temp_instance = NULL;
static char *temp_config = NULL;
-static char *top_builddir = NULL;
static bool nolocale = false;
static bool use_existing = false;
static char *hostname = NULL;
@@ -104,7 +88,6 @@ static bool port_specified_by_user = false;
static char *dlpath = PKGLIBDIR;
static char *user = NULL;
static _stringlist *extraroles = NULL;
-static _stringlist *extra_install = NULL;
static char *config_auth_datadir = NULL;
/* internal variables */
@@ -302,8 +285,10 @@ stop_postmaster(void)
fflush(stderr);
snprintf(buf, sizeof(buf),
- "\"%s/pg_ctl\" stop -D \"%s/data\" -s -m fast",- bindir, temp_install);+ "\"%s%spg_ctl\" stop -D \"%s/data\" -s -m fast",+ bindir ? bindir : "",+ bindir ? "/" : "",+ temp_instance);
r = system(buf);
if (r != 0)
{
@@ -751,27 +736,6 @@ doputenv(const char *var, const char *val)
}
/*
- * Set the environment variable "pathname", prepending "addval" to its- * old value (if any).- */-static void-add_to_path(const char *pathname, char separator, const char *addval)-{- char *oldval = getenv(pathname);- char *newval;-- if (!oldval || !oldval[0])- {- /* no previous value */- newval = psprintf("%s=%s", pathname, addval);- }- else- newval = psprintf("%s=%s%c%s", pathname, addval, separator, oldval);-- putenv(newval);-}--/*
* Prepare environment variables for running regression tests
*/
static void
@@ -845,7 +809,7 @@ initialize_environment(void)
putenv(new_pgoptions);
}
- if (temp_install)+ if (temp_instance)
{
/*
* Clear out any environment vars that might cause psql to connect to
@@ -883,49 +847,6 @@ initialize_environment(void)
sprintf(s, "%d", port);
doputenv("PGPORT", s);
}
-- /*- * GNU make stores some flags in the MAKEFLAGS environment variable to- * pass arguments to its own children. If we are invoked by make,- * that causes the make invoked by us to think its part of the make- * task invoking us, and so it tries to communicate with the toplevel- * make. Which fails.- *- * Unset the variable to protect against such problems. We also reset- * MAKELEVEL to be certain the child doesn't notice the make above us.- */- unsetenv("MAKEFLAGS");- unsetenv("MAKELEVEL");-- /*- * Adjust path variables to point into the temp-install tree- */- bindir = psprintf("%s/install/%s", temp_install, bindir);-- libdir = psprintf("%s/install/%s", temp_install, libdir);-- datadir = psprintf("%s/install/%s", temp_install, datadir);-- /* psql will be installed into temp-install bindir */- psqldir = bindir;-- /*- * Set up shared library paths to include the temp install.- *- * LD_LIBRARY_PATH covers many platforms. DYLD_LIBRARY_PATH works on- * Darwin, and maybe other Mach-based systems. LIBPATH is for AIX.- * Windows needs shared libraries in PATH (only those linked into- * executables, not dlopen'ed ones). Feel free to account for others- * as well.- */- add_to_path("LD_LIBRARY_PATH", ':', libdir);- add_to_path("DYLD_LIBRARY_PATH", ':', libdir);- add_to_path("LIBPATH", ':', libdir);-#if defined(WIN32)- add_to_path("PATH", ';', libdir);-#elif defined(__CYGWIN__)- add_to_path("PATH", ':', libdir);-#endif
}
else
{
@@ -1178,8 +1099,8 @@ psql_command(const char *database, const char *query,...)
/* And now we can build and execute the shell command */
snprintf(psql_cmd, sizeof(psql_cmd),
"\"%s%spsql\" -X -c \"%s\" \"%s\"",
- psqldir ? psqldir : "",- psqldir ? "/" : "",+ bindir ? bindir : "",+ bindir ? "/" : "",
query_escaped,
database);
@@ -2154,21 +2075,18 @@ help(void)
printf(_(" --outputdir=DIR place output files in DIR (default \".\")\n"));
printf(_(" --schedule=FILE use test ordering schedule from FILE\n"));
printf(_(" (can be used multiple times to concatenate)\n"));
- printf(_(" --temp-install=DIR create a temporary installation in DIR\n"));- printf(_(" --use-existing use an existing installation\n"));+ printf(_(" --temp-instance=DIR create a temporary instance in DIR\n"));+ printf(_(" --use-existing use an existing installation\n")); // XXX
printf(_("\n"));
- printf(_("Options for \"temp-install\" mode:\n"));- printf(_(" --extra-install=DIR additional directory to install (e.g., contrib)\n"));+ printf(_("Options for \"temp-instance\" mode:\n"));
printf(_(" --no-locale use C locale\n"));
printf(_(" --port=PORT start postmaster on PORT\n"));
printf(_(" --temp-config=FILE append contents of FILE to temporary config\n"));
- printf(_(" --top-builddir=DIR (relative) path to top level build directory\n"));
printf(_("\n"));
printf(_("Options for using an existing installation:\n"));
printf(_(" --host=HOST use postmaster running on HOST\n"));
printf(_(" --port=PORT use postmaster running at PORT\n"));
printf(_(" --user=USER connect as USER\n"));
- printf(_(" --psqldir=DIR use psql in DIR (default: configured bindir)\n"));
printf(_("\n"));
printf(_("The exit status is 0 if all tests passed, 1 if some tests failed, and 2\n"));
printf(_("if the tests could not be run for some reason.\n"));
@@ -2190,20 +2108,19 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
{"encoding", required_argument, NULL, 6},
{"outputdir", required_argument, NULL, 7},
{"schedule", required_argument, NULL, 8},
- {"temp-install", required_argument, NULL, 9},+ {"temp-instance", required_argument, NULL, 9},
{"no-locale", no_argument, NULL, 10},
- {"top-builddir", required_argument, NULL, 11},+ {"datadir", required_argument, NULL, 12},
{"host", required_argument, NULL, 13},
{"port", required_argument, NULL, 14},
{"user", required_argument, NULL, 15},
- {"psqldir", required_argument, NULL, 16},+ {"bindir", required_argument, NULL, 16},
{"dlpath", required_argument, NULL, 17},
{"create-role", required_argument, NULL, 18},
{"temp-config", required_argument, NULL, 19},
{"use-existing", no_argument, NULL, 20},
{"launcher", required_argument, NULL, 21},
{"load-extension", required_argument, NULL, 22},
- {"extra-install", required_argument, NULL, 23},
{"config-auth", required_argument, NULL, 24},
{NULL, 0, NULL, 0}
};
@@ -2275,14 +2192,11 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
add_stringlist_item(&schedulelist, optarg);
break;
case 9:
- temp_install = make_absolute_path(optarg);+ temp_instance = make_absolute_path(optarg);
break;
case 10:
nolocale = true;
break;
- case 11:- top_builddir = strdup(optarg);- break;
case 13:
hostname = strdup(optarg);
break;
@@ -2294,9 +2208,11 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
user = strdup(optarg);
break;
case 16:
- /* "--psqldir=" should mean to use PATH */+ /* "--bindir=" means to use PATH */
if (strlen(optarg))
- psqldir = strdup(optarg);+ bindir = strdup(optarg);+ else+ bindir = NULL;
break;
case 17:
dlpath = strdup(optarg);
@@ -2316,9 +2232,6 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
case 22:
add_stringlist_item(&loadextension, optarg);
break;
- case 23:- add_stringlist_item(&extra_install, optarg);- break;
case 24:
config_auth_datadir = pstrdup(optarg);
break;
@@ -2347,7 +2260,7 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
exit(0);
}
- if (temp_install && !port_specified_by_user)+ if (temp_instance && !port_specified_by_user)
/*
* To reduce chances of interference with parallel installations, use
@@ -2373,83 +2286,45 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
unlimit_core_size();
#endif
- if (temp_install)+ if (temp_instance)
{
FILE *pg_conf;
- _stringlist *sl;
/*
- * Prepare the temp installation+ * Prepare the temp instance
*/
- if (!top_builddir)- {- fprintf(stderr, _("--top-builddir must be specified when using --temp-install\n"));- exit(2);- }- if (directory_exists(temp_install))+ if (directory_exists(temp_instance))
{
- header(_("removing existing temp installation"));- if (!rmtree(temp_install, true))+ header(_("removing existing temp instance"));+ if (!rmtree(temp_instance, true))
{
- fprintf(stderr, _("\n%s: could not remove temp installation \"%s\"\n"),- progname, temp_install);+ fprintf(stderr, _("\n%s: could not remove temp instance \"%s\"\n"),+ progname, temp_instance);
exit(2);
}
}
- header(_("creating temporary installation"));+ header(_("creating temporary instance"));- /* make the temp install top directory */- make_directory(temp_install);+ /* make the temp instance top directory */+ make_directory(temp_instance);
/* and a directory for log files */
- snprintf(buf, sizeof(buf), "%s/log", outputdir);+ snprintf(buf, sizeof(buf), "%s/log", temp_instance);
if (!directory_exists(buf))
make_directory(buf);
- /* "make install" */-#ifndef WIN32_ONLY_COMPILER- snprintf(buf, sizeof(buf),- "\"%s\" -C \"%s\" DESTDIR=\"%s/install\" install > \"%s/log/install.log\" 2>&1",- makeprog, top_builddir, temp_install, outputdir);-#else- snprintf(buf, sizeof(buf),- "perl \"%s/src/tools/msvc/install.pl\" \"%s/install\" >\"%s/log/install.log\" 2>&1",- top_builddir, temp_install, outputdir);-#endif- if (system(buf))- {- fprintf(stderr, _("\n%s: installation failed\nExamine %s/log/install.log for the reason.\nCommand was: %s\n"), progname, outputdir, buf);- exit(2);- }-- for (sl = extra_install; sl != NULL; sl = sl->next)- {-#ifndef WIN32_ONLY_COMPILER- snprintf(buf, sizeof(buf),- "\"%s\" -C \"%s/%s\" DESTDIR=\"%s/install\" install >> \"%s/log/install.log\" 2>&1",- makeprog, top_builddir, sl->str, temp_install, outputdir);-#else- fprintf(stderr, _("\n%s: --extra-install option not supported on this platform\n"), progname);- exit(2);-#endif-- if (system(buf))- {- fprintf(stderr, _("\n%s: installation failed\nExamine %s/log/install.log for the reason.\nCommand was: %s\n"), progname, outputdir, buf);- exit(2);- }- }-
/* initdb */
header(_("initializing database system"));
snprintf(buf, sizeof(buf),
- "\"%s/initdb\" -D \"%s/data\" -L \"%s\" --noclean --nosync%s%s > \"%s/log/initdb.log\" 2>&1",- bindir, temp_install, datadir,+ "\"%s%sinitdb\" -D \"%s/data\" --noclean --nosync%s%s > \"%s/log/initdb.log\" 2>&1",+ bindir ? bindir : "",+ bindir ? "/" : "",+ temp_instance,
debug ? " --debug" : "",
nolocale ? " --no-locale" : "",
- outputdir);+ temp_instance);
if (system(buf))
{
fprintf(stderr, _("\n%s: initdb failed\nExamine %s/log/initdb.log for the reason.\nCommand was: %s\n"), progname, outputdir, buf);
@@ -2464,7 +2339,7 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
* failures, don't set max_prepared_transactions any higher than
* actually needed by the prepared_xacts regression test.)
*/
- snprintf(buf, sizeof(buf), "%s/data/postgresql.conf", temp_install);+ snprintf(buf, sizeof(buf), "%s/data/postgresql.conf", temp_instance);
pg_conf = fopen(buf, "a");
if (pg_conf == NULL)
{
@@ -2502,7 +2377,7 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
* Since we successfully used the same buffer for the much-longer
* "initdb" command, this can't truncate.
*/
- snprintf(buf, sizeof(buf), "%s/data", temp_install);+ snprintf(buf, sizeof(buf), "%s/data", temp_instance);
config_sspi_auth(buf);
#elif !defined(HAVE_UNIX_SOCKETS)
#error Platform has no means to secure the test installation.
@@ -2512,8 +2387,10 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
* Check if there is a postmaster running already.
*/
snprintf(buf2, sizeof(buf2),
- "\"%s/psql\" -X postgres <%s 2>%s",- bindir, DEVNULL, DEVNULL);+ "\"%s%spsql\" -X postgres <%s 2>%s",+ bindir ? bindir : "",+ bindir ? "/" : "",+ DEVNULL, DEVNULL);
for (i = 0; i < 16; i++)
{
@@ -2544,12 +2421,14 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
*/
header(_("starting postmaster"));
snprintf(buf, sizeof(buf),
- "\"%s/postgres\" -D \"%s/data\" -F%s "+ "\"%s%spostgres\" -D \"%s/data\" -F%s "
"-c \"listen_addresses=%s\" -k \"%s\" "
"> \"%s/log/postmaster.log\" 2>&1",
- bindir, temp_install, debug ? " -d 5" : "",+ bindir ? bindir : "",+ bindir ? "/" : "",+ temp_instance, debug ? " -d 5" : "",
hostname ? hostname : "", sockdir ? sockdir : "",
- outputdir);+ temp_instance);
postmaster_pid = spawn_process(buf);
if (postmaster_pid == INVALID_PID)
{
@@ -2663,23 +2542,23 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
/*
* Shut down temp installation's postmaster
*/
- if (temp_install)+ if (temp_instance)
{
header(_("shutting down postmaster"));
stop_postmaster();
}
/*
- * If there were no errors, remove the temp installation immediately to- * conserve disk space. (If there were errors, we leave the installation+ * If there were no errors, remove the temp instance immediately to+ * conserve disk space. (If there were errors, we leave the instance
* in place for possible manual investigation.)
*/
- if (temp_install && fail_count == 0 && fail_ignore_count == 0)+ if (temp_instance && fail_count == 0 && fail_ignore_count == 0)
{
- header(_("removing temporary installation"));- if (!rmtree(temp_install, true))- fprintf(stderr, _("\n%s: could not remove temp installation \"%s\"\n"),- progname, temp_install);+ header(_("removing temporary instance"));+ if (!rmtree(temp_instance, true))+ fprintf(stderr, _("\n%s: could not remove temp instance \"%s\"\n"),+ progname, temp_instance);
}
fclose(logfile);
diff --git a/src/test/regress/pg_regress.h b/src/test/regress/pg_regress.hindex a7af7a5..0fc9db7 100644--- a/src/test/regress/pg_regress.h+++ b/src/test/regress/pg_regress.h@@ -43,12 +43,6 @@ extern char *inputdir;
extern char *outputdir;
extern char *launcher;
-/*- * This should not be global but every module should be able to read command- * line parameters.- */-extern char *psqldir;-
extern const char *basic_diff_opts;
extern const char *pretty_diff_opts;
diff --git a/src/test/regress/pg_regress_main.c b/src/test/regress/pg_regress_main.cindex a403965..860431b 100644--- a/src/test/regress/pg_regress_main.c+++ b/src/test/regress/pg_regress_main.c@@ -65,8 +65,8 @@ psql_start_test(const char *testname,
snprintf(psql_cmd + offset, sizeof(psql_cmd) - offset,
"\"%s%spsql\" -X -a -q -d \"%s\" < \"%s\" > \"%s\" 2>&1",
- psqldir ? psqldir : "",- psqldir ? "/" : "",+ bindir ? bindir : "",+ bindir ? "/" : "",
dblist->str,
infile,
outfile);
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: peter_e@gmx.net, coelho@cri.ensmp.fr
Subject: Re: improving speed of make check-world
In-Reply-To: <54DFFE0C.4060100@gmx.net>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox