Thread
-
[PATCH v36 16/17] Add function RelationDropInitFork
Kyotaro Horiguchi <horikyota.ntt@gmail.com> — 2024-11-29T07:22:28Z
This commit introduces a function to drop an init fork during command execution. The function is prepared as a prerequisite for the following commits. --- src/backend/catalog/storage.c | 24 ++++++++++++++++++++++++ src/include/catalog/storage.h | 1 + 2 files changed, 25 insertions(+) diff --git a/src/backend/catalog/storage.c b/src/backend/catalog/storage.c index ad8855b69b4..82a0e50ec41 100644 --- a/src/backend/catalog/storage.c +++ b/src/backend/catalog/storage.c @@ -241,6 +241,30 @@ RelationCreateFork(SMgrRelation srel, ForkNumber forkNum, smgrcreate(srel, forkNum, false); } +/* + * RelationDropInitFork + * Delete physical storage for the init fork of a relation. + */ +void +RelationDropInitFork(SMgrRelation srel) +{ + int nestLevel = GetCurrentTransactionNestLevel(); + RelFileLocator rlocator = srel->smgr_rlocator.locator; + ProcNumber procNumber = srel->smgr_rlocator.backend; + PendingRelDelete *pending; + + /* Schedule the removal of this init fork at commit. */ + pending = (PendingRelDelete *) + MemoryContextAlloc(TopMemoryContext, sizeof(PendingRelDelete)); + pending->rlocator = rlocator; + pending->forks = FORKBITMAP_BIT(INIT_FORKNUM); + pending->procNumber = procNumber; + pending->atCommit = true; /* delete if commit */ + pending->nestLevel = nestLevel; + pending->next = pendingDeletes; + pendingDeletes = pending; +} + /* * Perform XLogInsert of an XLOG_SMGR_CREATE record to WAL. */ diff --git a/src/include/catalog/storage.h b/src/include/catalog/storage.h index cd5486896a6..d69cd46551b 100644 --- a/src/include/catalog/storage.h +++ b/src/include/catalog/storage.h @@ -27,6 +27,7 @@ extern SMgrRelation RelationCreateStorage(RelFileLocator rlocator, bool register_delete); extern void RelationCreateFork(SMgrRelation srel, ForkNumber forkNum, bool wal_log, bool undo_log); +extern void RelationDropInitFork(SMgrRelation srel); extern void RelationDropStorage(Relation rel); extern void RelationPreserveStorage(RelFileLocator rlocator, bool atCommit); extern void RelationPreTruncate(Relation rel); -- 2.43.5 ----Next_Part(Fri_Dec_27_17_25_02_2024_357)-- Content-Type: Text/X-Patch; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="v36-0017-In-place-persistence-change-to-LOGGED.patch"