diff options
-rw-r--r-- | src/backend/access/transam/twophase.c | 3 | ||||
-rw-r--r-- | src/backend/access/transam/xact.c | 14 | ||||
-rw-r--r-- | src/backend/catalog/storage.c | 3 | ||||
-rw-r--r-- | src/backend/storage/smgr/md.c | 26 |
4 files changed, 20 insertions, 26 deletions
diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index 54176ee9df..6d496b5804 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -1343,8 +1343,7 @@ FinishPreparedTransaction(const char *gid, bool isCommit) for (fork = 0; fork <= MAX_FORKNUM; fork++) { - if (smgrexists(srel, fork)) - smgrdounlink(srel, fork, false); + smgrdounlink(srel, fork, false); } smgrclose(srel); } diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 2ca1c14549..7bdf38636b 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -4532,11 +4532,8 @@ xact_redo_commit(xl_xact_commit *xlrec, TransactionId xid, XLogRecPtr lsn) for (fork = 0; fork <= MAX_FORKNUM; fork++) { - if (smgrexists(srel, fork)) - { - XLogDropRelation(xlrec->xnodes[i], fork); - smgrdounlink(srel, fork, true); - } + XLogDropRelation(xlrec->xnodes[i], fork); + smgrdounlink(srel, fork, true); } smgrclose(srel); } @@ -4637,11 +4634,8 @@ xact_redo_abort(xl_xact_abort *xlrec, TransactionId xid) for (fork = 0; fork <= MAX_FORKNUM; fork++) { - if (smgrexists(srel, fork)) - { - XLogDropRelation(xlrec->xnodes[i], fork); - smgrdounlink(srel, fork, true); - } + XLogDropRelation(xlrec->xnodes[i], fork); + smgrdounlink(srel, fork, true); } smgrclose(srel); } diff --git a/src/backend/catalog/storage.c b/src/backend/catalog/storage.c index 57987be2c0..34d99bfd04 100644 --- a/src/backend/catalog/storage.c +++ b/src/backend/catalog/storage.c @@ -360,8 +360,7 @@ smgrDoPendingDeletes(bool isCommit) srel = smgropen(pending->relnode, pending->backend); for (i = 0; i <= MAX_FORKNUM; i++) { - if (smgrexists(srel, i)) - smgrdounlink(srel, i, false); + smgrdounlink(srel, i, false); } smgrclose(srel); } diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c index 7f44606c1a..1d86e34aac 100644 --- a/src/backend/storage/smgr/md.c +++ b/src/backend/storage/smgr/md.c @@ -322,7 +322,13 @@ mdcreate(SMgrRelation reln, ForkNumber forkNum, bool isRedo) * number until it's safe, because relfilenode assignment skips over any * existing file. * - * If isRedo is true, it's okay for the relation to be already gone. + * All the above applies only to the relation's main fork; other forks can + * just be removed immediately, since they are not needed to prevent the + * relfilenode number from being recycled. Also, we do not carefully + * track whether other forks have been created or not, but just attempt to + * unlink them unconditionally; so we should never complain about ENOENT. + * + * If isRedo is true, it's unsurprising for the relation to be already gone. * Also, we should remove the file immediately instead of queuing a request * for later, since during redo there's no possibility of creating a * conflicting relation. @@ -350,13 +356,10 @@ mdunlink(RelFileNodeBackend rnode, ForkNumber forkNum, bool isRedo) if (isRedo || forkNum != MAIN_FORKNUM) { ret = unlink(path); - if (ret < 0) - { - if (!isRedo || errno != ENOENT) - ereport(WARNING, - (errcode_for_file_access(), - errmsg("could not remove file \"%s\": %m", path))); - } + if (ret < 0 && errno != ENOENT) + ereport(WARNING, + (errcode_for_file_access(), + errmsg("could not remove file \"%s\": %m", path))); } else { @@ -379,6 +382,9 @@ mdunlink(RelFileNodeBackend rnode, ForkNumber forkNum, bool isRedo) ereport(WARNING, (errcode_for_file_access(), errmsg("could not truncate file \"%s\": %m", path))); + + /* Register request to unlink first segment later */ + register_unlink(rnode); } /* @@ -410,10 +416,6 @@ mdunlink(RelFileNodeBackend rnode, ForkNumber forkNum, bool isRedo) } pfree(path); - - /* Register request to unlink first segment later */ - if (!isRedo && forkNum == MAIN_FORKNUM) - register_unlink(rnode); } /* |