![]() |
Storage Engine API
|
Locker, which cannot be used to lock/unlock resources and just returns true for checks for whether a particular resource is locked. More...
#include <locker_noop.h>
Locker, which cannot be used to lock/unlock resources and just returns true for checks for whether a particular resource is locked.
Do not use it for cases where actual locking behaviour is expected or locking is performed.
Public Member Functions | |
LockerNoop () | |
virtual bool | isNoop () const |
Returns true if this is an instance of LockerNoop. More... | |
virtual ClientState | getClientState () const |
Return whether client is holding any locks (active), or is queued on any locks or waiting for a ticket (throttled). More... | |
virtual LockerId | getId () const |
stdx::thread::id | getThreadId () const override |
Get a platform-specific thread identifier of the thread which owns the this locker for tracing purposes. More... | |
void | updateThreadIdToCurrentThread () override |
Updates any cached thread id values to represent the current thread. More... | |
void | unsetThreadId () override |
Clears any cached thread id values. More... | |
void | setSharedLocksShouldTwoPhaseLock (bool sharedLocksShouldTwoPhaseLock) override |
Indicate that shared locks should participate in two-phase locking for this Locker instance. More... | |
void | setMaxLockTimeout (Milliseconds maxTimeout) override |
This is useful to ensure that potential deadlocks do not occur. More... | |
bool | hasMaxLockTimeout () override |
Returns whether this Locker has a maximum lock timeout set. More... | |
void | unsetMaxLockTimeout () override |
Clears the max lock timeout override set by setMaxLockTimeout() above. More... | |
virtual LockResult | lockGlobal (OperationContext *opCtx, LockMode mode) |
This should be the first method invoked for a particular Locker object. More... | |
virtual LockResult | lockGlobal (LockMode mode) |
virtual LockResult | lockGlobalBegin (OperationContext *opCtx, LockMode mode, Date_t deadline) |
Requests the global lock to be acquired in the specified mode. More... | |
virtual LockResult | lockGlobalBegin (LockMode mode, Date_t deadline) |
virtual LockResult | lockGlobalComplete (OperationContext *opCtx, Date_t deadline) |
Calling lockGlobalComplete without an OperationContext does not allow the lock acquisition to be interrupted. More... | |
virtual LockResult | lockGlobalComplete (Date_t deadline) |
virtual void | lockMMAPV1Flush () |
This method is used only in the MMAP V1 storage engine, otherwise it is a no-op. More... | |
virtual bool | unlockGlobal () |
Decrements the reference count on the global lock. More... | |
virtual void | downgradeGlobalXtoSForMMAPV1 () |
This is only necessary for the MMAP V1 engine and in particular, the fsyncLock command which needs to first acquire the global lock in X-mode for truncating the journal and then downgrade to S before it blocks. More... | |
virtual void | beginWriteUnitOfWork () |
beginWriteUnitOfWork/endWriteUnitOfWork are called at the start and end of WriteUnitOfWorks. More... | |
virtual void | endWriteUnitOfWork () |
virtual bool | inAWriteUnitOfWork () const |
virtual LockResult | lock (OperationContext *opCtx, ResourceId resId, LockMode mode, Date_t deadline, bool checkDeadlock) |
Acquires lock on the specified resource in the specified mode and returns the outcome of the operation. More... | |
virtual LockResult | lock (ResourceId resId, LockMode mode, Date_t deadline, bool checkDeadlock) |
Calling lock without an OperationContext does not allow LOCK_WAITING states to be interrupted. More... | |
virtual void | downgrade (ResourceId resId, LockMode newMode) |
Downgrades the specified resource's lock mode without changing the reference count. More... | |
virtual bool | unlock (ResourceId resId) |
Releases a lock previously acquired through a lock call. More... | |
virtual LockMode | getLockMode (ResourceId resId) const |
Retrieves the mode in which a lock is held or checks whether the lock held for a particular resource covers the specified mode. More... | |
virtual bool | isLockHeldForMode (ResourceId resId, LockMode mode) const |
virtual bool | isDbLockedForMode (StringData dbName, LockMode mode) const |
virtual bool | isCollectionLockedForMode (StringData ns, LockMode mode) const |
virtual ResourceId | getWaitingResource () const |
Returns the resource that this locker is waiting/blocked on (if any). More... | |
virtual void | getLockerInfo (LockerInfo *lockerInfo) const |
virtual boost::optional< LockerInfo > | getLockerInfo () const |
Returns boost::none if this is an instance of LockerNoop, or a populated LockerInfo otherwise. More... | |
virtual bool | saveLockStateAndUnlock (LockSnapshot *stateOut) |
Retrieves all locks held by this transaction, other than RESOURCE_MUTEX locks, and what mode they're held in. More... | |
virtual void | restoreLockState (OperationContext *opCtx, const LockSnapshot &stateToRestore) |
Re-locks all locks whose state was stored in 'stateToRestore'. More... | |
virtual void | restoreLockState (const LockSnapshot &stateToRestore) |
virtual void | releaseTicket () |
Releases the ticket associated with the Locker. More... | |
virtual void | reacquireTicket (OperationContext *opCtx) |
Reacquires a ticket for the Locker. More... | |
virtual void | dump () const |
virtual bool | isW () const |
virtual bool | isR () const |
virtual bool | isLocked () const |
virtual bool | isWriteLocked () const |
virtual bool | isReadLocked () const |
virtual bool | hasLockPending () const |
Pending means we are currently trying to get a lock (could be the parallel batch writer lock). More... | |
bool | isGlobalLockedRecursively () override |
![]() | |
virtual | ~Locker () |
void | setShouldConflictWithSecondaryBatchApplication (bool newValue) |
If set to false, this opts out of conflicting with replication's use of the ParallelBatchWriterMode lock. More... | |
bool | shouldConflictWithSecondaryBatchApplication () const |
void | setShouldAcquireTicket (bool newValue) |
If set to false, this opts out of the ticket mechanism. More... | |
bool | shouldAcquireTicket () const |
unsigned | numResourcesToUnlockAtEndUnitOfWorkForTest () const |
This function is for unit testing only. More... | |
Additional Inherited Members | |
![]() | |
enum | ClientState { kInactive, kActiveReader, kActiveWriter, kQueuedReader, kQueuedWriter } |
State for reporting the number of active and queued reader and writer clients. More... | |
![]() | |
static void | setGlobalThrottling (class TicketHolder *reading, class TicketHolder *writing) |
Require global lock attempts to obtain tickets from 'reading' (for MODE_S and MODE_IS), and from 'writing' (for MODE_IX), which must have static lifetimes. More... | |
![]() | |
Locker () | |
![]() | |
int | _uninterruptibleLocksRequested = 0 |
The number of callers that are guarding from lock interruptions. More... | |
unsigned | _numResourcesToUnlockAtEndUnitOfWork = 0 |
The number of LockRequests to unlock at the end of this WUOW. More... | |
|
inline |
|
inlinevirtual |
beginWriteUnitOfWork/endWriteUnitOfWork are called at the start and end of WriteUnitOfWorks.
They can be used to implement two-phase locking. Each call to begin should be matched with an eventual call to end.
endWriteUnitOfWork, if not called in a nested WUOW, will release all two-phase locking held lock resources.
Implements mongo::Locker.
|
inlinevirtual |
Downgrades the specified resource's lock mode without changing the reference count.
Implements mongo::Locker.
|
inlinevirtual |
This is only necessary for the MMAP V1 engine and in particular, the fsyncLock command which needs to first acquire the global lock in X-mode for truncating the journal and then downgrade to S before it blocks.
The downgrade is necessary in order to be nice and not block readers while under fsyncLock.
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Return whether client is holding any locks (active), or is queued on any locks or waiting for a ticket (throttled).
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Returns boost::none if this is an instance of LockerNoop, or a populated LockerInfo otherwise.
Implements mongo::Locker.
|
inlinevirtual |
Retrieves the mode in which a lock is held or checks whether the lock held for a particular resource covers the specified mode.
For example isLockHeldForMode will return true for MODE_S, if MODE_X is already held, because MODE_X covers MODE_S.
Implements mongo::Locker.
|
inlineoverridevirtual |
Get a platform-specific thread identifier of the thread which owns the this locker for tracing purposes.
Implements mongo::Locker.
|
inlinevirtual |
Returns the resource that this locker is waiting/blocked on (if any).
If the locker is not waiting for a resource the returned value will be invalid (isValid() == false).
Implements mongo::Locker.
|
inlinevirtual |
Pending means we are currently trying to get a lock (could be the parallel batch writer lock).
Implements mongo::Locker.
|
inlineoverridevirtual |
Returns whether this Locker has a maximum lock timeout set.
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlineoverridevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Returns true if this is an instance of LockerNoop.
Because LockerNoop doesn't implement many methods, some users may need to check this first to find out what is safe to call. LockerNoop is only used in unittests and for a brief period at startup, so you can assume you hold the equivalent of a MODE_X lock when using it.
TODO get rid of this once we kill LockerNoop.
Reimplemented from mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Acquires lock on the specified resource in the specified mode and returns the outcome of the operation.
See the details for LockResult for more information on what the different results mean.
Each successful acquisition of a lock on a given resource increments the reference count of the lock. Therefore, each call, which returns LOCK_OK must be matched with a corresponding call to unlock.
If setLockTimeoutMillis has been called, then a lock request with a Date_t::max() deadline may throw a LockTimeout error. See setMaxLockTimeout() above for details.
opCtx | If provided, will be used to interrupt a LOCK_WAITING state. |
resId | Id of the resource to be locked. |
mode | Mode in which the resource should be locked. Lock upgrades are allowed. |
deadline | How long to wait for the lock to be granted, before returning LOCK_TIMEOUT. This parameter defaults to an infinite deadline. If Milliseconds(0) is passed, the request will return immediately, if the request could not be granted right away. |
checkDeadlock | Whether to enable deadlock detection for this acquisition. This parameter is put in place until we can handle deadlocks at all places, which acquire locks. |
Implements mongo::Locker.
|
inlinevirtual |
Calling lock without an OperationContext does not allow LOCK_WAITING states to be interrupted.
Implements mongo::Locker.
|
inlinevirtual |
This should be the first method invoked for a particular Locker object.
It acquires the Global lock in the specified mode and effectively indicates the mode of the operation. This is what the lock modes on the global lock mean:
IX - Regular write operation IS - Regular read operation S - Stops all write activity. Used for administrative operations (repl, etc). X - Stops all activity. Used for administrative operations (repl state changes, shutdown, etc).
This method can be called recursively, but each call to lockGlobal must be accompanied by a call to unlockGlobal.
opCtx | OperationContext used to interrupt the lock waiting, if provided. |
mode | Mode in which the global lock should be acquired. Also indicates the intent of the operation. |
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Requests the global lock to be acquired in the specified mode.
See the comments for lockBegin/Complete for more information on the semantics. The deadline indicates the absolute time point when this lock acquisition will time out, if not yet granted. The lockGlobalBegin method has a deadline for use with the TicketHolder, if there is one.
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Calling lockGlobalComplete without an OperationContext does not allow the lock acquisition to be interrupted.
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
This method is used only in the MMAP V1 storage engine, otherwise it is a no-op.
See the comments in the implementation for more details on how MMAP V1 journaling works.
Implements mongo::Locker.
|
inlinevirtual |
Reacquires a ticket for the Locker.
This must only be called after releaseTicket(). It restores the ticket under its previous LockMode. An OperationContext is required to interrupt the ticket acquisition to prevent deadlocks. A dead lock is possible when a ticket is reacquired while holding a lock.
Implements mongo::Locker.
|
inlinevirtual |
Releases the ticket associated with the Locker.
This allows locks to be held without contributing to reader/writer throttling.
Implements mongo::Locker.
|
inlinevirtual |
Re-locks all locks whose state was stored in 'stateToRestore'.
opCtx | An operation context that enables the restoration to be interrupted. |
Implements mongo::Locker.
|
inlinevirtual |
Implements mongo::Locker.
|
inlinevirtual |
Retrieves all locks held by this transaction, other than RESOURCE_MUTEX locks, and what mode they're held in.
Stores these locks in 'stateOut', destroying any previous state. Unlocks all locks held by this transaction. This functionality is used for yielding, which is voluntary/cooperative lock release and reacquisition in order to allow for interleaving of otherwise conflicting long-running operations.
This functionality is also used for releasing locks on databases and collections when cursors are dormant and waiting for a getMore request.
Returns true if locks are released. It is expected that restoreLockerImpl will be called in the future.
Returns false if locks are not released. restoreLockState(...) does not need to be called in this case.
Implements mongo::Locker.
|
inlineoverridevirtual |
This is useful to ensure that potential deadlocks do not occur.
Overrides provided timeouts in lock requests with 'maxTimeout' if the provided timeout is greater. Basically, no lock acquisition will take longer than 'maxTimeout'.
If an UninterruptibleLockGuard is set during a lock request, the max timeout override will be ignored.
Future lock requests may throw LockTimeout errors if a lock request provides a Date_t::max() deadline and 'maxTimeout' is reached. Presumably these callers do not expect to handle lock acquisition failure, so this is done to ensure the caller does not proceed as if the lock were successfully acquired.
Implements mongo::Locker.
|
inlineoverridevirtual |
Indicate that shared locks should participate in two-phase locking for this Locker instance.
Implements mongo::Locker.
|
inlinevirtual |
Releases a lock previously acquired through a lock call.
It is an error to try to release lock which has not been previously acquired (invariant violation).
Implements mongo::Locker.
|
inlinevirtual |
Decrements the reference count on the global lock.
If the reference count on the global lock hits zero, the transaction is over, and unlockGlobal unlocks all other locks except for RESOURCE_MUTEX locks.
Implements mongo::Locker.
|
inlineoverridevirtual |
Clears the max lock timeout override set by setMaxLockTimeout() above.
Implements mongo::Locker.
|
inlineoverridevirtual |
Clears any cached thread id values.
Implements mongo::Locker.
|
inlineoverridevirtual |
Updates any cached thread id values to represent the current thread.
Implements mongo::Locker.