On 23/09/2024 04:39, jian he wrote:
static void
RelationClearRelation(Relation relation)
{
     Assert(RelationHasReferenceCountZero(relation));
     Assert(!relation->rd_isnailed);

     /*
      * Relations created in the same transaction must never be removed, see
      * RelationFlushRelation.
      */
     Assert(relation->rd_createSubid == InvalidSubTransactionId);
     Assert(relation->rd_firstRelfilelocatorSubid == InvalidSubTransactionId);
     Assert(relation->rd_droppedSubid == InvalidSubTransactionId);

     /* Ensure it's closed at smgr level */
     RelationCloseSmgr(relation);

     /* Free AM cached data, if any */
     if (relation->rd_amcache)
         pfree(relation->rd_amcache);
     relation->rd_amcache = NULL;

     /* Mark it as invalid (just pro forma since we will free it below) */
     relation->rd_isvalid = false;

     /* Remove it from the hash table */
     RelationCacheDelete(relation);

     /* And release storage */
     RelationDestroyRelation(relation, false);
}


can be simplified as


static void
RelationClearRelation(Relation relation)
{
     ---bunch of Asserts

    /* first mark it as invalid */
    RelationInvalidateRelation(relation);

     /* Remove it from the hash table */
     RelationCacheDelete(relation);

     /* And release storage */
     RelationDestroyRelation(relation, false);
}
?


in RelationRebuildRelation
we can also use RelationInvalidateRelation?

Yep, that makes sense, changed them that way.

  *    We assume that at the time we are called, we have at least 
AccessShareLock
  *    on the target index.  (Note: in the calls from RelationClearRelation,
  *    this is legitimate because we know the rel has positive refcount.)

calling RelationClearRelation, rel->rd_refcnt == 0
seems conflicted with the above comments in RelationReloadIndexInfo.
so i am confused with the above comments.

That comment is outdated, because after these patches, there's only once caller, in RelationRebuildRelation. Fixed that, thanks for noticing!

Hmm, in case of a nailed index, this will get called with refcnt == 1, even though we have no AccessShareLock on the index. But I guess that's OK for a nailed index.

Committed with those fixes, thanks for the review!

--
Heikki Linnakangas
Neon (https://neon.tech)



Reply via email to