[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"