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)
