Use in-place tablespaces in regression test.
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
This commit is contained in:
parent
7170f2159f
commit
d6d317dbf6
@ -112,7 +112,7 @@ submake-contrib-spi: | submake-libpgport submake-generated-headers
|
|||||||
## Run tests
|
## Run tests
|
||||||
##
|
##
|
||||||
|
|
||||||
REGRESS_OPTS = --dlpath=. --max-concurrent-tests=20 --make-testtablespace-dir \
|
REGRESS_OPTS = --dlpath=. --max-concurrent-tests=20 \
|
||||||
$(EXTRA_REGRESS_OPTS)
|
$(EXTRA_REGRESS_OPTS)
|
||||||
|
|
||||||
check: all
|
check: all
|
||||||
@ -155,5 +155,4 @@ clean distclean maintainer-clean: clean-lib
|
|||||||
rm -f $(OBJS) refint$(DLSUFFIX) autoinc$(DLSUFFIX)
|
rm -f $(OBJS) refint$(DLSUFFIX) autoinc$(DLSUFFIX)
|
||||||
rm -f pg_regress_main.o pg_regress.o pg_regress$(X)
|
rm -f pg_regress_main.o pg_regress.o pg_regress$(X)
|
||||||
# things created by various check targets
|
# things created by various check targets
|
||||||
rm -rf testtablespace
|
|
||||||
rm -rf $(pg_regress_clean_files)
|
rm -rf $(pg_regress_clean_files)
|
||||||
|
@ -1,10 +1,18 @@
|
|||||||
-- directory paths are passed to us in environment variables
|
-- relative tablespace locations are not allowed
|
||||||
\getenv abs_builddir PG_ABS_BUILDDIR
|
CREATE TABLESPACE regress_tblspace LOCATION 'relative'; -- fail
|
||||||
\set testtablespace :abs_builddir '/testtablespace'
|
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 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"
|
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
|
-- check to see the parameter was used
|
||||||
SELECT spcoptions FROM pg_tablespace WHERE spcname = 'regress_tblspacewith';
|
SELECT spcoptions FROM pg_tablespace WHERE spcname = 'regress_tblspacewith';
|
||||||
spcoptions
|
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 the tablespace so we can re-use the location
|
||||||
DROP TABLESPACE regress_tblspacewith;
|
DROP TABLESPACE regress_tblspacewith;
|
||||||
-- create a tablespace we can use
|
-- 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
|
-- 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 (random_page_cost = 1.0, seq_page_cost = 1.1);
|
||||||
ALTER TABLESPACE regress_tblspace SET (some_nonexistent_parameter = true); -- fail
|
ALTER TABLESPACE regress_tblspace SET (some_nonexistent_parameter = true); -- fail
|
||||||
|
@ -438,32 +438,6 @@ string_matches_pattern(const char *str, const char *pattern)
|
|||||||
return false;
|
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.
|
* 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(_(" --launcher=CMD use CMD as launcher of psql\n"));
|
||||||
printf(_(" --load-extension=EXT load the named extension before running the\n"));
|
printf(_(" --load-extension=EXT load the named extension before running the\n"));
|
||||||
printf(_(" tests; can appear multiple times\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(_(" --max-connections=N maximum number of concurrent connections\n"));
|
||||||
printf(_(" (default is 0, meaning unlimited)\n"));
|
printf(_(" (default is 0, meaning unlimited)\n"));
|
||||||
printf(_(" --max-concurrent-tests=N maximum number of concurrent tests in schedule\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},
|
{"load-extension", required_argument, NULL, 22},
|
||||||
{"config-auth", required_argument, NULL, 24},
|
{"config-auth", required_argument, NULL, 24},
|
||||||
{"max-concurrent-tests", required_argument, NULL, 25},
|
{"max-concurrent-tests", required_argument, NULL, 25},
|
||||||
{"make-testtablespace-dir", no_argument, NULL, 26},
|
|
||||||
{NULL, 0, NULL, 0}
|
{NULL, 0, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
bool use_unix_sockets;
|
bool use_unix_sockets;
|
||||||
bool make_testtablespace_dir = false;
|
|
||||||
_stringlist *sl;
|
_stringlist *sl;
|
||||||
int c;
|
int c;
|
||||||
int i;
|
int i;
|
||||||
@ -2204,9 +2175,6 @@ regression_main(int argc, char *argv[],
|
|||||||
case 25:
|
case 25:
|
||||||
max_concurrent_tests = atoi(optarg);
|
max_concurrent_tests = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
case 26:
|
|
||||||
make_testtablespace_dir = true;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
/* getopt_long already emitted a complaint */
|
/* getopt_long already emitted a complaint */
|
||||||
fprintf(stderr, _("\nTry \"%s -h\" for more information.\n"),
|
fprintf(stderr, _("\nTry \"%s -h\" for more information.\n"),
|
||||||
@ -2259,9 +2227,6 @@ regression_main(int argc, char *argv[],
|
|||||||
unlimit_core_size();
|
unlimit_core_size();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (make_testtablespace_dir)
|
|
||||||
prepare_testtablespace_dir();
|
|
||||||
|
|
||||||
if (temp_instance)
|
if (temp_instance)
|
||||||
{
|
{
|
||||||
FILE *pg_conf;
|
FILE *pg_conf;
|
||||||
|
@ -1,11 +1,18 @@
|
|||||||
-- directory paths are passed to us in environment variables
|
-- relative tablespace locations are not allowed
|
||||||
\getenv abs_builddir PG_ABS_BUILDDIR
|
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 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
|
||||||
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
|
-- check to see the parameter was used
|
||||||
SELECT spcoptions FROM pg_tablespace WHERE spcname = 'regress_tblspacewith';
|
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;
|
DROP TABLESPACE regress_tblspacewith;
|
||||||
|
|
||||||
-- create a tablespace we can use
|
-- 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
|
-- 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 (random_page_cost = 1.0, seq_page_cost = 1.1);
|
||||||
|
@ -133,7 +133,6 @@ sub installcheck_internal
|
|||||||
"--bindir=../../../$Config/psql",
|
"--bindir=../../../$Config/psql",
|
||||||
"--schedule=${schedule}_schedule",
|
"--schedule=${schedule}_schedule",
|
||||||
"--max-concurrent-tests=20",
|
"--max-concurrent-tests=20",
|
||||||
"--make-testtablespace-dir",
|
|
||||||
"--encoding=SQL_ASCII",
|
"--encoding=SQL_ASCII",
|
||||||
"--no-locale");
|
"--no-locale");
|
||||||
push(@args, $maxconn) if $maxconn;
|
push(@args, $maxconn) if $maxconn;
|
||||||
@ -168,7 +167,6 @@ sub check
|
|||||||
"--bindir=",
|
"--bindir=",
|
||||||
"--schedule=${schedule}_schedule",
|
"--schedule=${schedule}_schedule",
|
||||||
"--max-concurrent-tests=20",
|
"--max-concurrent-tests=20",
|
||||||
"--make-testtablespace-dir",
|
|
||||||
"--encoding=SQL_ASCII",
|
"--encoding=SQL_ASCII",
|
||||||
"--no-locale",
|
"--no-locale",
|
||||||
"--temp-instance=./tmp_check");
|
"--temp-instance=./tmp_check");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user