diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c index dee29037b16..718c1cfc0f9 100644 --- a/src/backend/storage/smgr/md.c +++ b/src/backend/storage/smgr/md.c @@ -148,8 +148,7 @@ static void mdunlinkfork(RelFileLocatorBackend rlocator, ForkNumber forknum, 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, @@ -421,7 +420,7 @@ mdunlinkfork(RelFileLocatorBackend rlocator, ForkNumber forknum, bool isRedo) /* 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; } @@ -1557,15 +1556,18 @@ register_dirty_segment(SMgrRelation reln, ForkNumber forknum, MdfdVec *seg) } /* - * 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)); @@ -1958,6 +1960,9 @@ mdunlinkfiletag(const FileTag *ftag, char *path) { 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);