Improve isolation tests infrastructure.
authorAndres Freund <[email protected]>
Tue, 14 Mar 2017 22:56:17 +0000 (15:56 -0700)
committerAndres Freund <[email protected]>
Tue, 14 Mar 2017 22:56:17 +0000 (15:56 -0700)
Previously if a directory had both isolationtester and plain
regression tests, they couldn't be run in parallel, because they'd
access the same files/directories.  That, so far, only affected
contrib/test_decoding.

Rather than fix that locally in contrib/test_decoding, improve
pg_regress_isolation_[install]check to use separate resources from
plain regression tests.

That requires a minor change in pg_regress, namely that the
--outputdir is created if not already existing, that seems like good
idea anyway.

Use the improved helpers even where previously not used.

Author: Tom Lane and Andres Freund
Discussion: https://postgr.es/m/20170311194831[email protected]

contrib/test_decoding/.gitignore
contrib/test_decoding/Makefile
src/Makefile.global.in
src/test/isolation/.gitignore
src/test/isolation/Makefile
src/test/modules/snapshot_too_old/.gitignore
src/test/modules/snapshot_too_old/Makefile
src/test/regress/pg_regress.c

index 1f95503494e0883f144681d3f94822453a292199..b4903eba657fa1a1cf0e406ff35ce5b9c8ba2972 100644 (file)
@@ -1,5 +1,6 @@
 # Generated subdirectories
 /log/
-/isolation_output/
-/regression_output/
+/results/
+/output_iso/
 /tmp_check/
+/tmp_check_iso/
index d2bc8b8350a43b5c83c313f153cf7f6d208be92e..6c18189d9db58eef1d440fbc12410cb7cc1bbe20 100644 (file)
@@ -5,7 +5,7 @@ PGFILEDESC = "test_decoding - example of a logical decoding output plugin"
 
 # Note: because we don't tell the Makefile there are any regression tests,
 # we have to clean those result files explicitly
-EXTRA_CLEAN = $(pg_regress_clean_files) ./regression_output ./isolation_output
+EXTRA_CLEAN = $(pg_regress_clean_files)
 
 ifdef USE_PGXS
 PG_CONFIG = pg_config
@@ -42,11 +42,8 @@ REGRESSCHECKS=ddl xact rewrite toast permissions decoding_in_xact \
    spill slot
 
 regresscheck: | submake-regress submake-test_decoding temp-install
-   $(MKDIR_P) regression_output
    $(pg_regress_check) \
        --temp-config $(top_srcdir)/contrib/test_decoding/logical.conf \
-       --temp-instance=./tmp_check \
-       --outputdir=./regression_output \
        $(REGRESSCHECKS)
 
 regresscheck-install-force: | submake-regress submake-test_decoding temp-install
@@ -56,10 +53,8 @@ regresscheck-install-force: | submake-regress submake-test_decoding temp-install
 ISOLATIONCHECKS=mxact delayed_startup ondisk_startup concurrent_ddl_dml
 
 isolationcheck: | submake-isolation submake-test_decoding temp-install
-   $(MKDIR_P) isolation_output
    $(pg_isolation_regress_check) \
        --temp-config $(top_srcdir)/contrib/test_decoding/logical.conf \
-       --outputdir=./isolation_output \
        $(ISOLATIONCHECKS)
 
 isolationcheck-install-force: all | submake-isolation submake-test_decoding temp-install
index 831d39a9d13aee8047ee3c8f33b66dddccba06dc..e7862016aa4ade6318cecae6f7d79fdc2da3b7b8 100644 (file)
@@ -545,14 +545,31 @@ TEMP_CONF += --temp-config=$(TEMP_CONFIG)
 endif
 
 pg_regress_locale_flags = $(if $(ENCODING),--encoding=$(ENCODING)) $(NOLOCALE)
-
-pg_regress_check = $(with_temp_install) $(top_builddir)/src/test/regress/pg_regress --inputdir=$(srcdir) --temp-instance=./tmp_check $(TEMP_CONF) --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 = $(with_temp_install) $(top_builddir)/src/test/isolation/pg_isolation_regress --inputdir=$(srcdir) --temp-instance=./tmp_check $(TEMP_CONF) --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)
+pg_regress_clean_files = results/ regression.diffs regression.out tmp_check/ tmp_check_iso/ log/ output_iso/
+
+pg_regress_check = \
+    $(with_temp_install) \
+    $(top_builddir)/src/test/regress/pg_regress \
+    --temp-instance=./tmp_check \
+    --inputdir=$(srcdir) \
+    $(TEMP_CONF) \
+    --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_isolation_regress_check = \
+    $(with_temp_install) \
+    $(top_builddir)/src/test/isolation/pg_isolation_regress \
+    --temp-instance=./tmp_check_iso \
+    --inputdir=$(srcdir) --outputdir=output_iso \
+    $(TEMP_CONF) \
+    --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)
 
 ##########################################################################
 #
index 42ee94574456e05bc829f6a6c310da58d476cdda..44bcf95854c0a195bde9d50a6cf7f6ac87ac9fbd 100644 (file)
@@ -7,6 +7,5 @@
 /specscanner.c
 
 # Generated subdirectories
-/results/
-/log/
-/tmp_check/
+/output_iso/
+/tmp_check_iso/
index 3d272d5b59277c4eafa4920a9d7a5366b03f1199..8eb4969e9b8219c60aca35bbb1dc46bfca621433 100644 (file)
@@ -52,17 +52,17 @@ maintainer-clean: distclean
    rm -f specparse.c specscanner.c
 
 installcheck: all
-   ./pg_isolation_regress --bindir='$(bindir)' $(EXTRA_REGRESS_OPTS) --inputdir=$(srcdir) --schedule=$(srcdir)/isolation_schedule
+   $(pg_isolation_regress_installcheck) --schedule=$(srcdir)/isolation_schedule
 
 check: all
-   $(with_temp_install) ./pg_isolation_regress --temp-instance=./tmp_check $(TEMP_CONF) --inputdir=$(srcdir) --bindir= $(EXTRA_REGRESS_OPTS) --schedule=$(srcdir)/isolation_schedule
+   $(pg_isolation_regress_check) --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 temp-install
-   ./pg_isolation_regress --bindir='$(bindir)' $(EXTRA_REGRESS_OPTS) --inputdir=$(srcdir) --schedule=$(srcdir)/isolation_schedule prepared-transactions
+   $(pg_isolation_regress_installcheck) --schedule=$(srcdir)/isolation_schedule prepared-transactions
 
 check-prepared-txns: all temp-install
-   ./pg_isolation_regress --temp-instance=./tmp_check $(TEMP_CONF) $(EXTRA_REGRESS_OPTS) --inputdir=$(srcdir) --schedule=$(srcdir)/isolation_schedule prepared-transactions
+   $(pg_isolation_regress_check) --schedule=$(srcdir)/isolation_schedule prepared-transactions
index ef3609b7da21c61d93082ba582e7447b8f5c47af..5cf29ed6f859de670c52865bb17083b64b6a5f41 100644 (file)
@@ -1 +1 @@
-/isolation_output/
+/output_iso/
index 16339f0366799eec7bb52f3e795189add1151f4f..a72bfad43a004cedcff713471d4247609c5e5a00 100644 (file)
@@ -1,6 +1,8 @@
 # src/test/modules/snapshot_too_old/Makefile
 
-EXTRA_CLEAN = ./isolation_output
+# Note: because we don't tell the Makefile there are any regression tests,
+# we have to clean those result files explicitly
+EXTRA_CLEAN = $(pg_regress_clean_files)
 
 ISOLATIONCHECKS=sto_using_cursor sto_using_select
 
@@ -32,10 +34,8 @@ submake-test_snapshot_too_old:
    $(MAKE) -C $(top_builddir)/src/test/modules/snapshot_too_old
 
 isolationcheck: | submake-isolation submake-test_snapshot_too_old temp-install
-   $(MKDIR_P) isolation_output
    $(pg_isolation_regress_check) \
        --temp-config $(top_srcdir)/src/test/modules/snapshot_too_old/sto.conf \
-       --outputdir=./isolation_output \
        $(ISOLATIONCHECKS)
 
 isolationcheck-install-force: all | submake-isolation submake-test_snapshot_too_old temp-install
index c393ae1f5110531aca7c75a55c2bad0856af4007..2e58895066c4f36704cd7e258fa2f4b92f1ec59b 100644 (file)
@@ -1871,6 +1871,10 @@ open_result_files(void)
    char        file[MAXPGPATH];
    FILE       *difffile;
 
+   /* create outputdir directory if not present */
+   if (!directory_exists(outputdir))
+       make_directory(outputdir);
+
    /* create the log file (copy of running status output) */
    snprintf(file, sizeof(file), "%s/regression.out", outputdir);
    logfilename = pg_strdup(file);
@@ -1895,7 +1899,7 @@ open_result_files(void)
    /* we don't keep the diffs file open continuously */
    fclose(difffile);
 
-   /* also create the output directory if not present */
+   /* also create the results directory if not present */
    snprintf(file, sizeof(file), "%s/results", outputdir);
    if (!directory_exists(file))
        make_directory(file);