diff options
Diffstat (limited to 'src/mongo/db/concurrency/lock_manager.h')
-rw-r--r-- | src/mongo/db/concurrency/lock_manager.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/mongo/db/concurrency/lock_manager.h b/src/mongo/db/concurrency/lock_manager.h index e54524489c1..594e42057b8 100644 --- a/src/mongo/db/concurrency/lock_manager.h +++ b/src/mongo/db/concurrency/lock_manager.h @@ -49,6 +49,7 @@ namespace mongo { class OperationContext; class ServiceContext; +class TicketHolder; /** * Entry point for the lock manager scheduling functionality. Don't use it directly, but @@ -167,6 +168,18 @@ public: void getLockInfoBSON(const std::map<LockerId, BSONObj>& lockToClientMap, BSONObjBuilder* result); + /** + * Sets the TicketHolder implementation to use to obtain tickets from 'reading' (for MODE_S and + * MODE_IS), and from 'writing' (for MODE_IX) in order to throttle database access. There is no + * throttling for MODE_X, as there can only ever be a single locker using this mode. The + * throttling is intended to defend against large drops in throughput under high load due to too + * much concurrency. + */ + void setTicketHolders(std::unique_ptr<TicketHolder> readTickets, + std::unique_ptr<TicketHolder> writeTickets); + + TicketHolder* getTicketHolder(LockMode mode); + private: // The lockheads need access to the partitions friend struct LockHead; @@ -237,5 +250,8 @@ private: static const unsigned _numPartitions; Partition* _partitions; + + std::unique_ptr<TicketHolder> _readingTicketholder; + std::unique_ptr<TicketHolder> _writingTicketholder; }; } // namespace mongo |