Commit f433394e authored by Noah Misch's avatar Noah Misch

Handle USE_MODULE_DB for all tests able to use an installed postmaster.

When $(MODULES) and $(MODULE_big) are empty, derive the database name
from the first element of $(REGRESS) instead of using a constant string.
When deriving the database name from $(MODULES), use its first element
instead of the entire list; the earlier approach would fail if any
multi-module directory had $(REGRESS) tests.  Treat isolation suites and
src/pl correspondingly.  Under USE_MODULE_DB=1, installcheck-world and
check-world no longer reuse any database name in a given postmaster.
Buildfarm members axolotl, mandrill and frogfish saw spurious "is being
accessed by other users" failures that would not have happened without
database name reuse.  (The CountOtherDBBackends() 5s deadline expired
during DROP DATABASE; a backend for an earlier test suite had used the
same database name and had not yet exited.)  Back-patch to 9.4 (all
supported versions), except bits pertaining to isolation suites.

Concept reviewed by Andrew Dunstan, Andres Freund and Tom Lane.

Discussion: https://postgr.es/m/20190401135213.GE891537@rfd.leadboat.com
parent 2f932f71
......@@ -597,16 +597,25 @@ submake-libpgfeutils: | submake-generated-headers
#
# Testing support
PL_TESTDB = pl_regression
CONTRIB_TESTDB = contrib_regression
ifneq ($(MODULE_big),)
CONTRIB_TESTDB_MODULE = contrib_regression_$(MODULE_big)
else
ifneq ($(MODULES),)
CONTRIB_TESTDB_MODULE = contrib_regression_$(MODULES)
ifneq ($(USE_MODULE_DB),)
PL_TESTDB = pl_regression_$(NAME)
# Replace this with $(or ...) if we ever require GNU make 3.81.
ifneq ($(MODULE_big),)
CONTRIB_TESTDB=contrib_regression_$(MODULE_big)
ISOLATION_TESTDB=isolation_regression_$(MODULE_big)
else
CONTRIB_TESTDB_MODULE = contrib_regression
ifneq ($(MODULES),)
CONTRIB_TESTDB=contrib_regression_$(word 1,$(MODULES))
ISOLATION_TESTDB=isolation_regression_$(word 1,$(MODULES))
else
CONTRIB_TESTDB=contrib_regression_$(word 1,$(REGRESS))
ISOLATION_TESTDB=isolation_regression_$(word 1,$(ISOLATION))
endif
endif
else
PL_TESTDB = pl_regression
CONTRIB_TESTDB = contrib_regression
ISOLATION_TESTDB = isolation_regression
endif
ifdef NO_LOCALE
......
......@@ -380,12 +380,7 @@ distclean maintainer-clean: clean
ifdef REGRESS
# Select database to use for running the tests
ifneq ($(USE_MODULE_DB),)
REGRESS_OPTS += --dbname=$(CONTRIB_TESTDB_MODULE)
else
REGRESS_OPTS += --dbname=$(CONTRIB_TESTDB)
endif
REGRESS_OPTS += --dbname=$(CONTRIB_TESTDB)
# 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
......@@ -413,6 +408,10 @@ ifndef PGXS
$(MAKE) -C $(top_builddir)/src/test/isolation all
endif
ifdef ISOLATION
ISOLATION_OPTS += --dbname=$(ISOLATION_TESTDB)
endif
# Standard rules to run regression tests including multiple test suites.
# Runs against an installed postmaster.
ifndef NO_INSTALLCHECK
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment