static MdfdVec *mdopenfork(SMgrRelation reln, ForkNumber forknum, int behavior);
static void register_dirty_segment(SMgrRelation reln, ForkNumber forknum,
MdfdVec *seg);
-static void register_unlink_segment(RelFileLocatorBackend rlocator, ForkNumber forknum,
- BlockNumber segno);
+static void register_unlink_tombstone(RelFileLocatorBackend rlocator);
static void register_forget_request(RelFileLocatorBackend rlocator, ForkNumber forknum,
BlockNumber segno);
static void _fdvec_resize(SMgrRelation reln,
/* Register request to unlink first segment later */
save_errno = errno;
- register_unlink_segment(rlocator, forknum, 0 /* first seg */ );
+ register_unlink_tombstone(rlocator);
errno = save_errno;
}
}
/*
- * register_unlink_segment() -- Schedule a file to be deleted after next checkpoint
+ * register_unlink_tombstone() -- Schedule a tombstone file to be deleted
+ *
+ * A tombstone file is an empty first segment of a relation that has already
+ * been dropped (see mdunlink()). This function schedules it to be deleted
+ * after the next checkpoint.
*/
static void
-register_unlink_segment(RelFileLocatorBackend rlocator, ForkNumber forknum,
- BlockNumber segno)
+register_unlink_tombstone(RelFileLocatorBackend rlocator)
{
FileTag tag;
- INIT_MD_FILETAG(tag, rlocator.locator, forknum, segno);
+ INIT_MD_FILETAG(tag, rlocator.locator, MAIN_FORKNUM, 0);
/* Should never be used with temp relations */
Assert(!RelFileLocatorBackendIsTemp(rlocator));
{
RelPathStr p;
+ /* We only unlink tombstone files through this mechanism */
+ Assert(ftag->forknum == MAIN_FORKNUM && ftag->segno == 0);
+
/* Compute the path. */
p = relpathperm(ftag->rlocator, MAIN_FORKNUM);
strlcpy(path, p.str, MAXPGPATH);