Storage Engine API
mongo::PartitionedLockHead Struct Reference

The PartitionedLockHead allows optimizing the case where requests overwhelmingly use the intent lock modes MODE_IS and MODE_IX, which are compatible with each other. More...

Detailed Description

The PartitionedLockHead allows optimizing the case where requests overwhelmingly use the intent lock modes MODE_IS and MODE_IX, which are compatible with each other.

Having to use a single LockHead causes contention where none would be needed. So, each Locker is associated with a specific partition containing a mapping of resourceId to PartitionedLockHead.

As long as all lock requests for a resource have an intent mode, as opposed to a conflicting mode, its LockHead may reference PartitionedLockHeads. A partitioned LockHead will not have any conflicts. The total set of granted requests (with intent mode) is the union of its grantedList and all grantedLists in PartitionedLockHeads.

The existence of a PartitionedLockHead for a resource implies that its LockHead is partitioned. If a conflicting request is made on a LockHead, all requests from PartitionedLockHeads are migrated to that LockHead and the LockHead no longer partitioned.

Not thread-safe, must be accessed under its partition lock. May not lock a LockManager bucket while holding a partition lock.

Public Member Functions

void initNew (ResourceId resId)
 
void newRequest (LockRequest *request)
 

Public Attributes

LockRequestList grantedList
 

Member Function Documentation

◆ initNew()

void mongo::PartitionedLockHead::initNew ( ResourceId  resId)
inline

◆ newRequest()

void mongo::PartitionedLockHead::newRequest ( LockRequest request)
inline

Member Data Documentation

◆ grantedList

LockRequestList mongo::PartitionedLockHead::grantedList

The documentation for this struct was generated from the following file: