Thread

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