summaryrefslogtreecommitdiff
path: root/src/mongo/db/db_raii.h
diff options
context:
space:
mode:
authorKaloian Manassiev <kaloian.manassiev@mongodb.com>2017-12-14 11:57:35 -0500
committerKaloian Manassiev <kaloian.manassiev@mongodb.com>2017-12-16 11:43:28 -0500
commit8467708af7fa83f8827362b80f56dab4aad30a41 (patch)
treeab7858f01ec8ced3111c583ec33e1a55f89d27fe /src/mongo/db/db_raii.h
parent6cbca62471218a08a4fdf8785bd1e1e38cf9bde3 (diff)
downloadmongo-8467708af7fa83f8827362b80f56dab4aad30a41.tar.gz
SERVER-29909 Remove circular dependency between db_raii and sharding libraries
Diffstat (limited to 'src/mongo/db/db_raii.h')
-rw-r--r--src/mongo/db/db_raii.h188
1 files changed, 1 insertions, 187 deletions
diff --git a/src/mongo/db/db_raii.h b/src/mongo/db/db_raii.h
index f764d671d31..25c676fe7ea 100644
--- a/src/mongo/db/db_raii.h
+++ b/src/mongo/db/db_raii.h
@@ -30,197 +30,12 @@
#include <string>
-#include "mongo/base/string_data.h"
-#include "mongo/db/catalog/database.h"
-#include "mongo/db/concurrency/d_concurrency.h"
-#include "mongo/db/namespace_string.h"
-#include "mongo/db/operation_context.h"
+#include "mongo/db/catalog/catalog_raii.h"
#include "mongo/db/stats/top.h"
-#include "mongo/db/views/view.h"
#include "mongo/util/timer.h"
namespace mongo {
-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().
- *
- * Use this when you want to do a database-level operation, like read a list of all collections, or
- * drop a collection.
- *
- * It is guaranteed that the lock 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* opCtx, StringData ns, LockMode mode);
- AutoGetDb(OperationContext* opCtx, StringData ns, Lock::DBLock lock);
-
- Database* getDb() const {
- return _db;
- }
-
-private:
- const Lock::DBLock _dbLock;
- Database* const _db;
-};
-
-/**
- * RAII-style class, which acquires a locks on the specified database and collection in the
- * requested mode and obtains references to both.
- *
- * Use this when you want to access something at the collection level, but do not want to do any of
- * the tasks associated with the 'ForRead' variants below. For example, you can use this to access a
- * Collection's CursorManager, or to remove a document.
- *
- * It is guaranteed that locks will be released when this object goes out of scope, therefore
- * the database and the collection references returned by this class should not be retained.
- */
-class AutoGetCollection {
- MONGO_DISALLOW_COPYING(AutoGetCollection);
-
- enum class ViewMode;
-
-public:
- AutoGetCollection(OperationContext*, const NamespaceString&, const UUID&, LockMode modeAll);
-
- AutoGetCollection(OperationContext* opCtx, const NamespaceString& nss, LockMode modeAll)
- : AutoGetCollection(opCtx, nss, modeAll, modeAll, ViewMode::kViewsForbidden) {}
-
- AutoGetCollection(OperationContext* opCtx,
- const NamespaceString& nss,
- LockMode modeDB,
- LockMode modeColl)
- : AutoGetCollection(opCtx, nss, modeDB, modeColl, ViewMode::kViewsForbidden) {}
-
- AutoGetCollection(OperationContext* opCtx,
- const NamespaceString& nss,
- LockMode modeColl,
- ViewMode viewMode,
- Lock::DBLock lock);
- /**
- * This constructor is intended for internal use and should not be used outside this file.
- * AutoGetCollectionForReadCommand and AutoGetCollectionOrViewForReadCommand use 'viewMode' to
- * determine whether or not it is permissible to obtain a handle on a view namespace. Use
- * another constructor or another 'AutoGet' class instead.
- */
- AutoGetCollection(OperationContext* opCtx,
- const NamespaceString& nss,
- LockMode modeDB,
- LockMode modeColl,
- ViewMode viewMode);
-
- /**
- * Returns nullptr if the database didn't exist.
- */
- Database* getDb() const {
- return _autoDb.getDb();
- }
-
- /**
- * Returns nullptr if the collection didn't exist.
- */
- Collection* getCollection() const {
- return _coll;
- }
-
-private:
- enum class ViewMode { kViewsPermitted, kViewsForbidden };
-
- const ViewMode _viewMode;
- const AutoGetDb _autoDb;
- const Lock::CollectionLock _collLock;
- Collection* const _coll;
-
- friend class AutoGetCollectionOrView;
- friend class AutoGetCollectionForRead;
- friend class AutoGetCollectionForReadCommand;
- friend class AutoGetCollectionOrViewForReadCommand;
-};
-
-/**
- * RAII-style class which acquires the appropriate hierarchy of locks for a collection or
- * view. The pointer to a view definition is nullptr if it does not exist.
- *
- * Use this when you have not yet determined if the namespace is a view or a collection.
- * For example, you can use this to access a namespace's CursorManager.
- *
- * It is guaranteed that locks will be released when this object goes out of scope, therefore
- * the view returned by this class should not be retained.
- */
-class AutoGetCollectionOrView {
- MONGO_DISALLOW_COPYING(AutoGetCollectionOrView);
-
-public:
- AutoGetCollectionOrView(OperationContext* opCtx, const NamespaceString& nss, LockMode modeAll);
-
- /**
- * Returns nullptr if the database didn't exist.
- */
- Database* getDb() const {
- return _autoColl.getDb();
- }
-
- /**
- * Returns nullptr if the collection didn't exist.
- */
- Collection* getCollection() const {
- return _autoColl.getCollection();
- }
-
- /**
- * Returns nullptr if the view didn't exist.
- */
- ViewDefinition* getView() const {
- return _view.get();
- }
-
-private:
- const AutoGetCollection _autoColl;
- std::shared_ptr<ViewDefinition> _view;
-};
-
-/**
- * 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.
- *
- * Use this when you are about to perform a write, and want to create the database if it doesn't
- * already exist.
- *
- * 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* opCtx, StringData ns, LockMode mode);
-
- Database* getDb() const {
- return _db;
- }
-
- bool justCreated() const {
- return _justCreated;
- }
-
- Lock::DBLock& lock() {
- return _dbLock;
- }
-
-private:
- Lock::DBLock _dbLock; // not const, as we may need to relock for implicit create
- Database* _db;
- bool _justCreated;
-};
-
/**
* RAII-style class which automatically tracks the operation namespace in CurrentOp and records the
* operation via Top upon destruction.
@@ -448,7 +263,6 @@ private:
Timer _timer;
};
-
class OldClientWriteContext {
MONGO_DISALLOW_COPYING(OldClientWriteContext);