Use in-place tablespaces in regression test.
authorThomas Munro <tmunro@postgresql.org>
Fri, 14 Jan 2022 08:29:17 +0000 (21:29 +1300)
committerThomas Munro <tmunro@postgresql.org>
Fri, 14 Jan 2022 11:09:24 +0000 (00:09 +1300)
Remove the machinery from pg_regress that manages the testtablespace
directory.  Instead, use "in-place" tablespaces, because they work
correctly when there is a streaming replica running on the same host.

Reviewed-by: Andres Freund <andres@anarazel.de>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/CA%2BhUKGKpRWQ9SxdxxDmTBCJoR0YnFpMBe7kyzY8SUQk%2BHeskxg%40mail.gmail.com

src/test/regress/GNUmakefile
src/test/regress/expected/tablespace.out
src/test/regress/pg_regress.c
src/test/regress/sql/tablespace.sql
src/tools/msvc/vcregress.pl

index 8a315e595b3a49a9c2baa4863c24ed2b9b4acaba..0d91dd31578c6b2e1d9b18258d42945c034db1ad 100644 (file)
@@ -112,7 +112,7 @@ submake-contrib-spi: | submake-libpgport submake-generated-headers
 ## Run tests
 ##
 
-REGRESS_OPTS = --dlpath=. --max-concurrent-tests=20 --make-testtablespace-dir \
+REGRESS_OPTS = --dlpath=. --max-concurrent-tests=20 \
    $(EXTRA_REGRESS_OPTS)
 
 check: all
@@ -155,5 +155,4 @@ clean distclean maintainer-clean: clean-lib
    rm -f $(OBJS) refint$(DLSUFFIX) autoinc$(DLSUFFIX)
    rm -f pg_regress_main.o pg_regress.o pg_regress$(X)
 # things created by various check targets
-   rm -rf testtablespace
    rm -rf $(pg_regress_clean_files)
index 864f4b6e20873c450074a7b754cb51933b9f3b85..2dfbcfdebe181b618c30364e924994806a4e18a1 100644 (file)
@@ -1,10 +1,18 @@
--- directory paths are passed to us in environment variables
-\getenv abs_builddir PG_ABS_BUILDDIR
-\set testtablespace :abs_builddir '/testtablespace'
+-- relative tablespace locations are not allowed
+CREATE TABLESPACE regress_tblspace LOCATION 'relative'; -- fail
+ERROR:  tablespace location must be an absolute path
+-- empty tablespace locations are not usually allowed
+CREATE TABLESPACE regress_tblspace LOCATION ''; -- fail
+ERROR:  tablespace location must be an absolute path
+-- as a special developer-only option to allow us to use tablespaces
+-- with streaming replication on the same server, an empty location
+-- can be allowed as a way to say that the tablespace should be created
+-- as a directory in pg_tblspc, rather than being a symlink
+SET allow_in_place_tablespaces = true;
 -- create a tablespace using WITH clause
-CREATE TABLESPACE regress_tblspacewith LOCATION :'testtablespace' WITH (some_nonexistent_parameter = true); -- fail
+CREATE TABLESPACE regress_tblspacewith LOCATION '' WITH (some_nonexistent_parameter = true); -- fail
 ERROR:  unrecognized parameter "some_nonexistent_parameter"
-CREATE TABLESPACE regress_tblspacewith LOCATION :'testtablespace' WITH (random_page_cost = 3.0); -- ok
+CREATE TABLESPACE regress_tblspacewith LOCATION '' WITH (random_page_cost = 3.0); -- ok
 -- check to see the parameter was used
 SELECT spcoptions FROM pg_tablespace WHERE spcname = 'regress_tblspacewith';
        spcoptions       
@@ -15,7 +23,7 @@ SELECT spcoptions FROM pg_tablespace WHERE spcname = 'regress_tblspacewith';
 -- drop the tablespace so we can re-use the location
 DROP TABLESPACE regress_tblspacewith;
 -- create a tablespace we can use
-CREATE TABLESPACE regress_tblspace LOCATION :'testtablespace';
+CREATE TABLESPACE regress_tblspace LOCATION '';
 -- try setting and resetting some properties for the new tablespace
 ALTER TABLESPACE regress_tblspace SET (random_page_cost = 1.0, seq_page_cost = 1.1);
 ALTER TABLESPACE regress_tblspace SET (some_nonexistent_parameter = true);  -- fail
index cc311dba4c59184a31103412970f39b28da2424b..e6f71c7582ed8739c289ee4b6c48c06074f08940 100644 (file)
@@ -438,32 +438,6 @@ string_matches_pattern(const char *str, const char *pattern)
    return false;
 }
 
-/*
- * Clean out the test tablespace dir, or create it if it doesn't exist.
- *
- * On Windows, doing this cleanup here makes it possible to run the
- * regression tests under a Windows administrative user account with the
- * restricted token obtained when starting pg_regress.
- */
-static void
-prepare_testtablespace_dir(void)
-{
-   char        testtablespace[MAXPGPATH];
-
-   snprintf(testtablespace, MAXPGPATH, "%s/testtablespace", outputdir);
-
-   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);
-}
-
 /*
  * Scan resultmap file to find which platform-specific expected files to use.
  *
@@ -2014,7 +1988,6 @@ help(void)
    printf(_("      --launcher=CMD            use CMD as launcher of psql\n"));
    printf(_("      --load-extension=EXT      load the named extension before running the\n"));
    printf(_("                                tests; can appear multiple times\n"));
-   printf(_("      --make-testtablespace-dir create testtablespace directory\n"));
    printf(_("      --max-connections=N       maximum number of concurrent connections\n"));
    printf(_("                                (default is 0, meaning unlimited)\n"));
    printf(_("      --max-concurrent-tests=N  maximum number of concurrent tests in schedule\n"));
@@ -2073,12 +2046,10 @@ regression_main(int argc, char *argv[],
        {"load-extension", required_argument, NULL, 22},
        {"config-auth", required_argument, NULL, 24},
        {"max-concurrent-tests", required_argument, NULL, 25},
-       {"make-testtablespace-dir", no_argument, NULL, 26},
        {NULL, 0, NULL, 0}
    };
 
    bool        use_unix_sockets;
-   bool        make_testtablespace_dir = false;
    _stringlist *sl;
    int         c;
    int         i;
@@ -2204,9 +2175,6 @@ regression_main(int argc, char *argv[],
            case 25:
                max_concurrent_tests = atoi(optarg);
                break;
-           case 26:
-               make_testtablespace_dir = true;
-               break;
            default:
                /* getopt_long already emitted a complaint */
                fprintf(stderr, _("\nTry \"%s -h\" for more information.\n"),
@@ -2259,9 +2227,6 @@ regression_main(int argc, char *argv[],
    unlimit_core_size();
 #endif
 
-   if (make_testtablespace_dir)
-       prepare_testtablespace_dir();
-
    if (temp_instance)
    {
        FILE       *pg_conf;
index 92076db9a134302bb933125ce3a4276e27a310b9..896f05cea3253562928290ad66686cd2e0dde87f 100644 (file)
@@ -1,11 +1,18 @@
--- directory paths are passed to us in environment variables
-\getenv abs_builddir PG_ABS_BUILDDIR
+-- relative tablespace locations are not allowed
+CREATE TABLESPACE regress_tblspace LOCATION 'relative'; -- fail
 
-\set testtablespace :abs_builddir '/testtablespace'
+-- empty tablespace locations are not usually allowed
+CREATE TABLESPACE regress_tblspace LOCATION ''; -- fail
+
+-- as a special developer-only option to allow us to use tablespaces
+-- with streaming replication on the same server, an empty location
+-- can be allowed as a way to say that the tablespace should be created
+-- as a directory in pg_tblspc, rather than being a symlink
+SET allow_in_place_tablespaces = true;
 
 -- create a tablespace using WITH clause
-CREATE TABLESPACE regress_tblspacewith LOCATION :'testtablespace' WITH (some_nonexistent_parameter = true); -- fail
-CREATE TABLESPACE regress_tblspacewith LOCATION :'testtablespace' WITH (random_page_cost = 3.0); -- ok
+CREATE TABLESPACE regress_tblspacewith LOCATION '' WITH (some_nonexistent_parameter = true); -- fail
+CREATE TABLESPACE regress_tblspacewith LOCATION '' WITH (random_page_cost = 3.0); -- ok
 
 -- check to see the parameter was used
 SELECT spcoptions FROM pg_tablespace WHERE spcname = 'regress_tblspacewith';
@@ -14,7 +21,7 @@ SELECT spcoptions FROM pg_tablespace WHERE spcname = 'regress_tblspacewith';
 DROP TABLESPACE regress_tblspacewith;
 
 -- create a tablespace we can use
-CREATE TABLESPACE regress_tblspace LOCATION :'testtablespace';
+CREATE TABLESPACE regress_tblspace LOCATION '';
 
 -- try setting and resetting some properties for the new tablespace
 ALTER TABLESPACE regress_tblspace SET (random_page_cost = 1.0, seq_page_cost = 1.1);
index 7575acdfdf573b6fd85bde2190ea5bc8b027166e..7c4115614e5432d8251a25c1a5fc3c5f6ee59e76 100644 (file)
@@ -133,7 +133,6 @@ sub installcheck_internal
        "--bindir=../../../$Config/psql",
        "--schedule=${schedule}_schedule",
        "--max-concurrent-tests=20",
-       "--make-testtablespace-dir",
        "--encoding=SQL_ASCII",
        "--no-locale");
    push(@args, $maxconn) if $maxconn;
@@ -168,7 +167,6 @@ sub check
        "--bindir=",
        "--schedule=${schedule}_schedule",
        "--max-concurrent-tests=20",
-       "--make-testtablespace-dir",
        "--encoding=SQL_ASCII",
        "--no-locale",
        "--temp-instance=./tmp_check");