[PATCH v36 16/17] Add function RelationDropInitFork
Kyotaro Horiguchi <horikyota.ntt@gmail.com>
From: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
To:
Date: 2024-11-29T07:22:28Z
Lists: pgsql-hackers
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"