Hello. I saw a failure of vcregress check with the following message several times, on a machine under a heavy load and maybe with realtime virus scanning.
> pg_regress: could not create directory ".../testtablespace": Permission > denied. I found that pg_regress repeats the sequence rmtree(tablespace)->make_directory(tablespace) twice under initialize_environment. So it should be THE DELETE_PENDING. It is because the code is in convert_sourcefiles_in, which is called succssively twice in convert_sourcefiles. But in the first place it comes from [1] and the comment says: > * XXX it would be better if pg_regress.c had nothing at all to do with > * testtablespace, and this were handled by a .BAT file or similar on > * Windows. See pgsql-hackers discussion of 2008-01-18. Is there any reason not to do that in vcregress.pl? I think the commands other than 'check' don't needs this. [1] https://www.postgresql.org/message-id/11718.1200684807%40sss.pgh.pa.us regards. -- Kyotaro Horiguchi NTT Open Source Software Center
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c index 9a4e52bc7b..ae2bbba541 100644 --- a/src/test/regress/pg_regress.c +++ b/src/test/regress/pg_regress.c @@ -490,28 +490,6 @@ 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. On other platforms we expect the Makefile to take care - * of that. (We don't migrate that functionality in here because it'd be - * harder to cope with platform-specific issues such as SELinux.) - * - * XXX it would be better if pg_regress.c had nothing at all to do with - * testtablespace, and this were handled by a .BAT file or similar on - * Windows. See pgsql-hackers discussion of 2008-01-18. - */ - 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 82dca29a61..d20d700d15 100644 --- a/src/tools/msvc/vcregress.pl +++ b/src/tools/msvc/vcregress.pl @@ -128,8 +128,15 @@ sub installcheck sub check { my $schedule = shift || 'parallel'; + my $tablespace = 'testtablespace'; + InstallTemp(); chdir "${topdir}/src/test/regress"; + + # Tablespace setup + rmtree($tablespace) if (-e $tablespace); + mkdir($tablespace); + my @args = ( "../../../$Config/pg_regress/pg_regress", "--dlpath=.",