On Fri, Mar 13, 2020 at 8:29 AM Amit Kapila <amit.kapil...@gmail.com> wrote: > > On Thu, Mar 12, 2020 at 7:50 PM Kuntal Ghosh <kuntalghosh.2...@gmail.com> > wrote: > > I think moving them inside a macro is a good idea. Also, I think we > > should move all the Assert related code inside some debugging macro > > similar to this: > > #ifdef LOCK_DEBUG > > .... > > #endif > > > If we move it under some macro, then those Asserts will be only > enabled when that macro is defined. I think we want there Asserts to > be enabled always in assert enabled build, these will be like any > other Asserts in the code. What is the advantage of doing those under > macro? > My concern is related to performance regression. We're using two static variables in hot-paths only for checking a few asserts. So, I'm not sure whether we should enable the same by default, specially when asserts are itself disabled. -ResetRelExtLockHeldCount() +ResetRelExtPageLockHeldCount() { RelationExtensionLockHeldCount = 0; + PageLockHeldCount = 0; +} Also, we're calling this method from frequently used functions like Commit/AbortTransaction. So, it's better these two static variables share the same cache line and reinitalize them with a single instruction.
> > > /* > > + * The relation extension or page lock conflict even between the group > > + * members. > > + */ > > + if ((LOCK_LOCKTAG(*lock) == LOCKTAG_RELATION_EXTEND) || > > + (LOCK_LOCKTAG(*lock) == LOCKTAG_PAGE)) > > + { > > + PROCLOCK_PRINT("LockCheckConflicts: conflicting (group)", > > + proclock); > > + return true; > > + } > > This check includes the heavyweight locks that conflict even under > > same parallel group. It also has another property that they can never > > participate in deadlock cycles. And, the number of locks under this > > category is likely to increase in future with new parallel features. > > Hence, it could be used in multiple places. Should we move the > > condition inside a macro and just call it from here? > > > > Right, this is what I have suggested upthread. Do you have any > suggestions for naming such a macro or function? I could think of > something like LocksConflictAmongGroupMembers or > LocksNotParticipateInDeadlock. The first one suits more for its usage > in LockCheckConflicts and the second in the deadlock.c code. So none > of those sound perfect to me. > Actually, I'm not able to come up with a good suggestion. I'm trying to think of a generic name similar to strong or weak locks but with the following properties: a. Locks that don't participate in deadlock detection b. Locks that conflicts in the same parallel group -- Thanks & Regards, Kuntal Ghosh EnterpriseDB: http://www.enterprisedb.com