summaryrefslogtreecommitdiff
path: root/src/backend/commands/tablespace.c
diff options
context:
space:
mode:
authorNoah Misch2014-11-12 12:33:17 +0000
committerNoah Misch2014-11-12 12:33:17 +0000
commit28245b8424e29808f4f714482077a762cab0c5c5 (patch)
tree10f9bdb69ac89be96a4f6f102c4c187b2120921e /src/backend/commands/tablespace.c
parent8339f33d68e08d24eb316971a0ac73af162d52b3 (diff)
Use just one database connection in the "tablespace" test.
On Windows, DROP TABLESPACE has a race condition when run concurrently with other processes having opened files in the tablespace. This led to a rare failure on buildfarm member frogmouth. Back-patch to 9.4, where the reconnection was introduced.
Diffstat (limited to 'src/backend/commands/tablespace.c')
-rw-r--r--src/backend/commands/tablespace.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c
index 378e355adcc..616308bc2d3 100644
--- a/src/backend/commands/tablespace.c
+++ b/src/backend/commands/tablespace.c
@@ -493,6 +493,13 @@ DropTableSpace(DropTableSpaceStmt *stmt)
* but we can't tell them apart from important data files that we
* mustn't delete. So instead, we force a checkpoint which will clean
* out any lingering files, and try again.
+ *
+ * XXX On Windows, an unlinked file persists in the directory listing
+ * until no process retains an open handle for the file. The DDL
+ * commands that schedule files for unlink send invalidation messages
+ * directing other PostgreSQL processes to close the files. DROP
+ * TABLESPACE should not give up on the tablespace becoming empty
+ * until all relevant invalidation processing is complete.
*/
RequestCheckpoint(CHECKPOINT_IMMEDIATE | CHECKPOINT_FORCE | CHECKPOINT_WAIT);
if (!destroy_tablespace_directories(tablespaceoid, false))