35 #include "mongo/db/operation_context.h" 36 #include "mongo/platform/atomic_word.h" 37 #include "mongo/util/concurrency/spin_lock.h" 95 template <
bool IsForMMAPV1>
106 virtual ClientState getClientState()
const;
112 stdx::thread::id getThreadId()
const override;
114 void updateThreadIdToCurrentThread()
override;
115 void unsetThreadId()
override;
118 _sharedLocksShouldTwoPhaseLock = sharedLocksShouldTwoPhaseLock;
122 _maxLockTimeout = maxTimeout;
126 return static_cast<bool>(_maxLockTimeout);
130 _maxLockTimeout = boost::none;
135 return lockGlobal(
nullptr, mode);
138 return _lockGlobalBegin(opCtx, mode, deadline);
141 return _lockGlobalBegin(
nullptr, mode, deadline);
143 virtual LockResult lockGlobalComplete(OperationContext* opCtx, Date_t deadline);
145 return lockGlobalComplete(
nullptr, deadline);
147 virtual void lockMMAPV1Flush();
149 virtual void downgradeGlobalXtoSForMMAPV1();
150 virtual bool unlockGlobal();
152 virtual void beginWriteUnitOfWork();
153 virtual void endWriteUnitOfWork();
156 return _wuowNestingLevel > 0;
165 virtual LockResult lock(OperationContext* opCtx,
168 Date_t deadline = Date_t::max(),
169 bool checkDeadlock =
false);
173 Date_t deadline = Date_t::max(),
174 bool checkDeadlock =
false) {
175 return lock(
nullptr, resId, mode, deadline, checkDeadlock);
184 virtual bool isDbLockedForMode(StringData dbName,
LockMode mode)
const;
185 virtual bool isCollectionLockedForMode(StringData
ns,
LockMode mode)
const;
187 virtual ResourceId getWaitingResource()
const;
189 virtual void getLockerInfo(
LockerInfo* lockerInfo)
const;
190 virtual boost::optional<LockerInfo> getLockerInfo()
const final;
192 virtual bool saveLockStateAndUnlock(
LockSnapshot* stateOut);
194 virtual void restoreLockState(OperationContext* opCtx,
const LockSnapshot& stateToRestore);
196 restoreLockState(
nullptr, stateToRestore);
199 virtual void releaseTicket();
200 virtual void reacquireTicket(OperationContext* opCtx);
241 LockResult lockComplete(OperationContext* opCtx,
248 return lockComplete(
nullptr, resId, mode, deadline, checkDeadlock);
255 scoped_spinlock scopedLock(_lock);
281 LockMode _getModeForMMAPV1FlushLock()
const;
300 void _releaseTicket();
338 AtomicWord<ClientState> _clientState{kInactive};
344 bool _sharedLocksShouldTwoPhaseLock =
false;
359 virtual void dump()
const;
361 virtual bool isW()
const;
362 virtual bool isR()
const;
364 virtual bool isLocked()
const;
365 virtual bool isWriteLocked()
const;
366 virtual bool isReadLocked()
const;
367 bool isGlobalLockedRecursively()
override;
370 return getWaitingResource().
isValid();
425 void upgradeFlushLockToExclusive();
virtual void notify(ResourceId resId, LockResult result)
This method is invoked at most once for each lock request and indicates the outcome of the lock acqui...
Definition: lock_state.cpp:236
LockManager * getGlobalLockManager()
Retrieves the global lock manager instance.
Definition: lock_state.cpp:1088
Interface for acquiring locks.
Definition: locker.h:47
Entry point for the lock manager scheduling functionality.
Definition: lock_manager.h:53
Collection *const const NamespaceString & ns
Definition: collection_info_cache_impl.cpp:53
Interface on which granted lock requests will be notified.
Definition: lock_manager_defs.h:276
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
SingleThreadedLockStats _stats
Definition: lock_state.h:328
FastMapNoAlloc< ResourceId, LockRequest > getRequestsForTest() const
This function is for unit testing only.
Definition: lock_state.h:254
uint64_t LockerId
Definition: lock_manager_defs.h:246
LockerImpl< true > MMAPV1LockerImpl
Definition: lock_state.h:375
Returns information and locking statistics for this instance of the locker.
Definition: locker.h:319
void unsetMaxLockTimeout() override
Clears the max lock timeout override set by setMaxLockTimeout() above.
Definition: lock_state.h:129
SpinLock _lock
Definition: lock_state.h:316
const LockerId _id
Definition: lock_state.h:309
void setMaxLockTimeout(Milliseconds maxTimeout) override
This is useful to ensure that potential deadlocks do not occur.
Definition: lock_state.h:121
LockResult lockComplete(ResourceId resId, LockMode mode, Date_t deadline, bool checkDeadlock)
Definition: lock_state.h:247
virtual bool hasLockPending() const
Pending means we are currently trying to get a lock (could be the parallel batch writer lock)...
Definition: lock_state.h:369
FastMapNoAlloc< ResourceId, LockRequest > LockRequestsMap
Definition: lock_state.h:262
Uniquely identifies a lockable resource.
Definition: lock_manager_defs.h:176
stdx::mutex _mutex
Definition: lock_state.h:76
Notfication callback, which stores the last notification result and signals a condition variable...
Definition: lock_state.h:45
void setSharedLocksShouldTwoPhaseLock(bool sharedLocksShouldTwoPhaseLock) override
Indicate that shared locks should participate in two-phase locking for this Locker instance...
Definition: lock_state.h:117
void clear()
Clears the object so it can be reused.
Definition: lock_state.cpp:215
LockResult _result
Definition: lock_state.h:80
IndexSet::const_iterator it
Definition: ephemeral_for_test_btree_impl.cpp:458
CondVarLockGrantNotification _notify
Definition: lock_state.h:324
bool hasMaxLockTimeout() override
Returns whether this Locker has a maximum lock timeout set.
Definition: lock_state.h:125
LockResult
Return values for the locking functions of the lock manager.
Definition: lock_manager_defs.h:99
Interface for acquiring locks.
Definition: lock_state.h:96
LockMode
Lock modes.
Definition: lock_manager_defs.h:59
RecordId _id
Definition: wiredtiger_index.cpp:1132
virtual LockResult lockGlobal(LockMode mode)
Definition: lock_state.h:134
LockRequestsMap _requests
Definition: lock_state.h:320
LockResult wait(Milliseconds timeout)
Uninterruptible blocking method, which waits for the notification to fire.
Definition: lock_state.cpp:219
stdx::thread::id _threadId
Definition: lock_state.h:341
std::array< DefaultLockerImpl, kMaxPerfThreads > locker
Definition: d_concurrency_bm.cpp:66
virtual void restoreLockState(const LockSnapshot &stateToRestore)
Definition: lock_state.h:195
stdx::condition_variable _cond
Definition: lock_state.h:77
CondVarLockGrantNotification()
Definition: lock_state.cpp:211
boost::optional< Milliseconds > _maxLockTimeout
Definition: lock_state.h:350
Definition: lock_manager_defs.h:60
IteratorImpl< FastMapNoAlloc< ResourceId, LockRequest >, LockRequest, map_iterator > Iterator
Definition: fast_map_noalloc.h:196
virtual LockResult lockGlobalBegin(OperationContext *opCtx, LockMode mode, Date_t deadline)
Requests the global lock to be acquired in the specified mode.
Definition: lock_state.h:137
MONGO_DISALLOW_COPYING(CondVarLockGrantNotification)
virtual bool inAWriteUnitOfWork() const
Definition: lock_state.h:155
LockSnapshot captures the state of all resources that are locked, what modes they're locked in...
Definition: locker.h:342
virtual LockResult lockGlobalComplete(Date_t deadline)
Definition: lock_state.h:144
Collection *const OperationContext *const opCtx
Definition: collection_impl.cpp:80
virtual LockResult lockGlobalBegin(LockMode mode, Date_t deadline)
Definition: lock_state.h:140
int _wuowNestingLevel
Definition: lock_state.h:332
virtual LockResult lock(ResourceId resId, LockMode mode, Date_t deadline=Date_t::max(), bool checkDeadlock=false)
Calling lock without an OperationContext does not allow LOCK_WAITING states to be interrupted...
Definition: lock_state.h:171
LockerImpl< false > DefaultLockerImpl
Definition: lock_state.h:374
virtual LockerId getId() const
Definition: lock_state.h:108
bool isValid() const
Definition: lock_manager_defs.h:198