diff options
author | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2015-06-20 00:22:50 -0400 |
---|---|---|
committer | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2015-06-20 10:56:02 -0400 |
commit | 9c2ed42daa8fbbef4a919c21ec564e2db55e8d60 (patch) | |
tree | 3814f79c10d7b490948d8cb7b112ac1dd41ceff1 /src/mongo/db/db_raii.h | |
parent | 01965cf52bce6976637ecb8f4a622aeb05ab256a (diff) | |
download | mongo-9c2ed42daa8fbbef4a919c21ec564e2db55e8d60.tar.gz |
SERVER-18579: Clang-Format - reformat code, no comment reflow
Diffstat (limited to 'src/mongo/db/db_raii.h')
-rw-r--r-- | src/mongo/db/db_raii.h | 301 |
1 files changed, 156 insertions, 145 deletions
diff --git a/src/mongo/db/db_raii.h b/src/mongo/db/db_raii.h index 580389e9b1b..b37112cb267 100644 --- a/src/mongo/db/db_raii.h +++ b/src/mongo/db/db_raii.h @@ -39,164 +39,175 @@ namespace mongo { - class Collection; +class Collection; - /** - * RAII-style class, which acquires a lock on the specified database in the requested mode and - * obtains a reference to the database. Used as a shortcut for calls to dbHolder().get(). - * - * It is guaranteed that locks will be released when this object goes out of scope, therefore - * the database reference returned by this class should not be retained. - */ - class AutoGetDb { - MONGO_DISALLOW_COPYING(AutoGetDb); - public: - AutoGetDb(OperationContext* txn, StringData ns, LockMode mode); +/** + * RAII-style class, which acquires a lock on the specified database in the requested mode and + * obtains a reference to the database. Used as a shortcut for calls to dbHolder().get(). + * + * It is guaranteed that locks will be released when this object goes out of scope, therefore + * the database reference returned by this class should not be retained. + */ +class AutoGetDb { + MONGO_DISALLOW_COPYING(AutoGetDb); - Database* getDb() const { - return _db; - } +public: + AutoGetDb(OperationContext* txn, StringData ns, LockMode mode); - private: - const Lock::DBLock _dbLock; - Database* const _db; - }; + Database* getDb() const { + return _db; + } - /** - * RAII-style class, which acquires a lock on the specified database in the requested mode and - * obtains a reference to the database, creating it was non-existing. Used as a shortcut for - * calls to dbHolder().openDb(), taking care of locking details. The requested mode must be - * MODE_IX or MODE_X. If the database needs to be created, the lock will automatically be - * reacquired as MODE_X. - * - * It is guaranteed that locks will be released when this object goes out of scope, therefore - * the database reference returned by this class should not be retained. - */ - class AutoGetOrCreateDb { - MONGO_DISALLOW_COPYING(AutoGetOrCreateDb); - public: - AutoGetOrCreateDb(OperationContext* txn, StringData ns, LockMode mode); +private: + const Lock::DBLock _dbLock; + Database* const _db; +}; + +/** + * RAII-style class, which acquires a lock on the specified database in the requested mode and + * obtains a reference to the database, creating it was non-existing. Used as a shortcut for + * calls to dbHolder().openDb(), taking care of locking details. The requested mode must be + * MODE_IX or MODE_X. If the database needs to be created, the lock will automatically be + * reacquired as MODE_X. + * + * It is guaranteed that locks will be released when this object goes out of scope, therefore + * the database reference returned by this class should not be retained. + */ +class AutoGetOrCreateDb { + MONGO_DISALLOW_COPYING(AutoGetOrCreateDb); + +public: + AutoGetOrCreateDb(OperationContext* txn, StringData ns, LockMode mode); + + Database* getDb() const { + return _db; + } + + bool justCreated() const { + return _justCreated; + } + + Lock::DBLock& lock() { + return _dbLock; + } + +private: + ScopedTransaction _transaction; + Lock::DBLock _dbLock; // not const, as we may need to relock for implicit create + Database* _db; + bool _justCreated; +}; + +/** + * RAII-style class, which would acquire the appropritate hierarchy of locks for obtaining + * a particular collection and would retrieve a reference to the collection. + * + * It is guaranteed that locks will be released when this object goes out of scope, therefore + * database and collection references returned by this class should not be retained. + */ +class AutoGetCollectionForRead { + MONGO_DISALLOW_COPYING(AutoGetCollectionForRead); - Database* getDb() const { - return _db; - } +public: + AutoGetCollectionForRead(OperationContext* txn, const std::string& ns); + AutoGetCollectionForRead(OperationContext* txn, const NamespaceString& nss); + ~AutoGetCollectionForRead(); - bool justCreated() const { - return _justCreated; - } + Database* getDb() const { + return _db.getDb(); + } - Lock::DBLock& lock() { return _dbLock; } + Collection* getCollection() const { + return _coll; + } - private: - ScopedTransaction _transaction; - Lock::DBLock _dbLock; // not const, as we may need to relock for implicit create - Database* _db; - bool _justCreated; - }; +private: + void _init(const std::string& ns, StringData coll); + + const Timer _timer; + OperationContext* const _txn; + const ScopedTransaction _transaction; + const AutoGetDb _db; + const Lock::CollectionLock _collLock; + + Collection* _coll; +}; + +/** + * Opens the database that we want to use and sets the appropriate namespace on the + * current operation. + */ +class OldClientContext { + MONGO_DISALLOW_COPYING(OldClientContext); + +public: + /** this is probably what you want */ + OldClientContext(OperationContext* txn, const std::string& ns, bool doVersion = true); /** - * RAII-style class, which would acquire the appropritate hierarchy of locks for obtaining - * a particular collection and would retrieve a reference to the collection. - * - * It is guaranteed that locks will be released when this object goes out of scope, therefore - * database and collection references returned by this class should not be retained. + * Below still calls _finishInit, but assumes database has already been acquired + * or just created. */ - class AutoGetCollectionForRead { - MONGO_DISALLOW_COPYING(AutoGetCollectionForRead); - public: - AutoGetCollectionForRead(OperationContext* txn, const std::string& ns); - AutoGetCollectionForRead(OperationContext* txn, const NamespaceString& nss); - ~AutoGetCollectionForRead(); - - Database* getDb() const { - return _db.getDb(); - } - - Collection* getCollection() const { - return _coll; - } - - private: - void _init(const std::string& ns, - StringData coll); - - const Timer _timer; - OperationContext* const _txn; - const ScopedTransaction _transaction; - const AutoGetDb _db; - const Lock::CollectionLock _collLock; - - Collection* _coll; - }; + OldClientContext(OperationContext* txn, const std::string& ns, Database* db, bool justCreated); /** - * Opens the database that we want to use and sets the appropriate namespace on the - * current operation. + * note: this does not call _finishInit -- i.e., does not call + * ensureShardVersionOKOrThrow for example. + * see also: reset(). */ - class OldClientContext { - MONGO_DISALLOW_COPYING(OldClientContext); - public: - /** this is probably what you want */ - OldClientContext(OperationContext* txn, const std::string& ns, bool doVersion = true); - - /** - * Below still calls _finishInit, but assumes database has already been acquired - * or just created. - */ - OldClientContext(OperationContext* txn, - const std::string& ns, - Database* db, - bool justCreated); - - /** - * note: this does not call _finishInit -- i.e., does not call - * ensureShardVersionOKOrThrow for example. - * see also: reset(). - */ - OldClientContext(OperationContext* txn, const std::string& ns, Database * db); - - ~OldClientContext(); - - Database* db() const { return _db; } - const char* ns() const { return _ns.c_str(); } - - /** @return if the db was created by this OldClientContext */ - bool justCreated() const { return _justCreated; } - - private: - friend class CurOp; - void _finishInit(); - void _checkNotStale() const; - - bool _justCreated; - bool _doVersion; - const std::string _ns; - Database * _db; - OperationContext* _txn; - - Timer _timer; - }; - - - class OldClientWriteContext { - MONGO_DISALLOW_COPYING(OldClientWriteContext); - public: - OldClientWriteContext(OperationContext* opCtx, const std::string& ns); - - Database* db() const { return _c.db(); } - - Collection* getCollection() const { - return _c.db()->getCollection(_nss.ns()); - } - - private: - OperationContext* const _txn; - const NamespaceString _nss; - - AutoGetOrCreateDb _autodb; - Lock::CollectionLock _collk; - OldClientContext _c; - Collection* _collection; - }; + OldClientContext(OperationContext* txn, const std::string& ns, Database* db); + + ~OldClientContext(); + + Database* db() const { + return _db; + } + const char* ns() const { + return _ns.c_str(); + } + + /** @return if the db was created by this OldClientContext */ + bool justCreated() const { + return _justCreated; + } + +private: + friend class CurOp; + void _finishInit(); + void _checkNotStale() const; + + bool _justCreated; + bool _doVersion; + const std::string _ns; + Database* _db; + OperationContext* _txn; + + Timer _timer; +}; + + +class OldClientWriteContext { + MONGO_DISALLOW_COPYING(OldClientWriteContext); + +public: + OldClientWriteContext(OperationContext* opCtx, const std::string& ns); + + Database* db() const { + return _c.db(); + } + + Collection* getCollection() const { + return _c.db()->getCollection(_nss.ns()); + } + +private: + OperationContext* const _txn; + const NamespaceString _nss; + + AutoGetOrCreateDb _autodb; + Lock::CollectionLock _collk; + OldClientContext _c; + Collection* _collection; +}; } // namespace mongo |