Move tablespace path re-creation from the makefiles to pg_regress
authorMichael Paquier <michael@paquier.xyz>
Wed, 10 Mar 2021 05:50:00 +0000 (14:50 +0900)
committerMichael Paquier <michael@paquier.xyz>
Wed, 10 Mar 2021 05:50:00 +0000 (14:50 +0900)
Moving this logic into pg_regress fixes a potential failure with
parallel tests when pg_upgrade and the main regression test suite both
trigger the makefile rule that cleaned up testtablespace/ under
src/test/regress.  Even if pg_upgrade was triggering this rule, it has
no need to do so as it uses a different tablespace path.  So if
pg_upgrade triggered the makefile rule for the tablespace setup while
the main regression test suite ran the tablespace cases, it would fail.

61be85a was a similar attempt at achieving that, but that broke cases
where the regression tests require to run under an Administrator
account, like with Appveyor.

Reported-by: Andres Freund, Kyotaro Horiguchi
Reviewed-by: Peter Eisentraut
Discussion: https://postgr.es/m/20201209012911.uk4d6nxcnkp7ehrx@alap3.anarazel.de

src/bin/pg_upgrade/test.sh
src/test/regress/GNUmakefile
src/test/regress/pg_regress.c
src/tools/msvc/vcregress.pl

index ca923ba01bc4d761e364e5560e8ea5265179aa6d..9c6deae294a7d37d78ad1b79b48726685d7d440a 100644 (file)
@@ -106,7 +106,6 @@ outputdir="$temp_root/regress"
 EXTRA_REGRESS_OPTS="$EXTRA_REGRESS_OPTS --outputdir=$outputdir"
 export EXTRA_REGRESS_OPTS
 mkdir "$outputdir"
-mkdir "$outputdir"/testtablespace
 
 logdir=`pwd`/log
 rm -rf "$logdir"
index 3d85857bfa8d7dfe8a63dfc2fedd8c459a85f798..95e4bc8228079c82bfac73d19d33d3d63c170230 100644 (file)
@@ -114,13 +114,6 @@ submake-contrib-spi: | submake-libpgport submake-generated-headers
 
 .PHONY: submake-contrib-spi
 
-# Tablespace setup
-
-.PHONY: tablespace-setup
-tablespace-setup:
-   rm -rf ./testtablespace
-   mkdir ./testtablespace
-
 
 ##
 ## Run tests
@@ -128,19 +121,19 @@ tablespace-setup:
 
 REGRESS_OPTS = --dlpath=. --max-concurrent-tests=20 $(EXTRA_REGRESS_OPTS)
 
-check: all tablespace-setup
+check: all
    $(pg_regress_check) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) $(EXTRA_TESTS)
 
-check-tests: all tablespace-setup | temp-install
+check-tests: all | temp-install
    $(pg_regress_check) $(REGRESS_OPTS) $(MAXCONNOPT) $(TESTS) $(EXTRA_TESTS)
 
-installcheck: all tablespace-setup
+installcheck: all
    $(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/serial_schedule $(EXTRA_TESTS)
 
-installcheck-parallel: all tablespace-setup
+installcheck-parallel: all
    $(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) $(EXTRA_TESTS)
 
-installcheck-tests: all tablespace-setup
+installcheck-tests: all
    $(pg_regress_installcheck) $(REGRESS_OPTS) $(TESTS) $(EXTRA_TESTS)
 
 standbycheck: all
@@ -152,10 +145,10 @@ runcheck: check
 runtest: installcheck
 runtest-parallel: installcheck-parallel
 
-bigtest: all tablespace-setup
+bigtest: all
    $(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/serial_schedule numeric_big
 
-bigcheck: all tablespace-setup | temp-install
+bigcheck: all | temp-install
    $(pg_regress_check) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) numeric_big
 
 
index b284cc88c40e5c731a8541aed76a9c7cc4cdfa97..b7d80bd9bb3d212304a746d34cc1211a14015265 100644 (file)
@@ -506,24 +506,22 @@ convert_sourcefiles_in(const char *source_subdir, const char *dest_dir, const ch
 
    snprintf(testtablespace, MAXPGPATH, "%s/testtablespace", outputdir);
 
-#ifdef WIN32
-
    /*
-    * On Windows only, clean out the test tablespace dir, or create it if it
-    * doesn't exist so as it is possible to run the regression tests as a
-    * Windows administrative user account with the restricted token obtained
-    * when starting pg_regress.  On other platforms we expect the Makefile to
-    * take care of that.
+    * Clean out the test tablespace dir, or create it if it doesn't exist. On
+    * Windows, doing this cleanup here makes possible to run the regression
+    * tests as a Windows administrative user account with the restricted
+    * token obtained when starting pg_regress.
     */
    if (directory_exists(testtablespace))
+   {
        if (!rmtree(testtablespace, true))
        {
            fprintf(stderr, _("\n%s: could not remove test tablespace \"%s\"\n"),
                    progname, testtablespace);
            exit(2);
        }
+   }
    make_directory(testtablespace);
-#endif
 
    /* finally loop on each file and do the replacement */
    for (name = names; *name; name++)
index 14cceac31e01cc65a52be92742272b8d44abaeb3..d9bac6c3a29cb23da37effe416dab572f49c33d3 100644 (file)
@@ -585,7 +585,6 @@ sub upgradecheck
    my $outputdir          = "$tmp_root/regress";
    my @EXTRA_REGRESS_OPTS = ("--outputdir=$outputdir");
    mkdir "$outputdir"                || die $!;
-   mkdir "$outputdir/testtablespace" || die $!;
 
    my $logdir = "$topdir/src/bin/pg_upgrade/log";
    rmtree($logdir);