From 6c788d9f6aadb41d76a72d56149268371a7895ee Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 10 Mar 2021 14:50:00 +0900 Subject: [PATCH] Move tablespace path re-creation from the makefiles to pg_regress 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 | 1 - src/test/regress/GNUmakefile | 21 +++++++-------------- src/test/regress/pg_regress.c | 14 ++++++-------- src/tools/msvc/vcregress.pl | 1 - 4 files changed, 13 insertions(+), 24 deletions(-) diff --git a/src/bin/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh index ca923ba01bc..9c6deae294a 100644 --- a/src/bin/pg_upgrade/test.sh +++ b/src/bin/pg_upgrade/test.sh @@ -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" diff --git a/src/test/regress/GNUmakefile b/src/test/regress/GNUmakefile index 3d85857bfa8..95e4bc82280 100644 --- a/src/test/regress/GNUmakefile +++ b/src/test/regress/GNUmakefile @@ -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 diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c index b284cc88c40..b7d80bd9bb3 100644 --- a/src/test/regress/pg_regress.c +++ b/src/test/regress/pg_regress.c @@ -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++) diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl index 14cceac31e0..d9bac6c3a29 100644 --- a/src/tools/msvc/vcregress.pl +++ b/src/tools/msvc/vcregress.pl @@ -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);