summaryrefslogtreecommitdiff
path: root/src/mongo/db/client.h
diff options
context:
space:
mode:
authorAndy Schwerin <schwerin@mongodb.com>2015-03-26 16:40:28 -0400
committerAndy Schwerin <schwerin@mongodb.com>2015-03-27 10:25:09 -0400
commit92593d1af174244ba5560be29908b4f729fec78c (patch)
treed98ba6959b2f91da14aad46794248d2323c7ce08 /src/mongo/db/client.h
parent18a3b8528833a478d5a207bfe5fcb8e35673ee8f (diff)
downloadmongo-92593d1af174244ba5560be29908b4f729fec78c.tar.gz
SERVER-17758 Move AutoGet* and Client::*Context to their own file.
The new file is mongo/db/db_raii.h. Also, Client::Context is now OldClientContext and Client::WriteContext is OldClientWriteContext.
Diffstat (limited to 'src/mongo/db/client.h')
-rw-r--r--src/mongo/db/client.h168
1 files changed, 0 insertions, 168 deletions
diff --git a/src/mongo/db/client.h b/src/mongo/db/client.h
index b83ce05c9c0..bd3f83667a5 100644
--- a/src/mongo/db/client.h
+++ b/src/mongo/db/client.h
@@ -40,7 +40,6 @@
#include <boost/thread/thread.hpp>
#include "mongo/bson/optime.h"
-#include "mongo/db/catalog/database.h"
#include "mongo/db/client_basic.h"
#include "mongo/db/concurrency/d_concurrency.h"
#include "mongo/db/lasterror.h"
@@ -61,100 +60,6 @@ namespace mongo {
typedef long long ConnectionId;
- /**
- * 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.
- *
- * TODO: This should be moved outside of client.h (maybe dbhelpers.h)
- */
- class AutoGetDb {
- MONGO_DISALLOW_COPYING(AutoGetDb);
- public:
- AutoGetDb(OperationContext* txn, StringData ns, LockMode mode);
-
- Database* getDb() const {
- return _db;
- }
-
- 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.
- *
- * TODO: This should be moved outside of client.h (maybe dbhelpers.h)
- */
- 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.
- *
- * TODO: This should be moved outside of client.h (maybe dbhelpers.h)
- */
- 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;
- };
-
typedef unordered_set<Client*> ClientSet;
/** the database's concept of an outside "client" */
@@ -269,79 +174,6 @@ namespace mongo {
// Tracks if Client::shutdown() gets called (TODO: Is this necessary?)
bool _shutdown;
-
- public:
-
- /**
- * Opens the database that we want to use and sets the appropriate namespace on the
- * current operation.
- */
- class Context {
- MONGO_DISALLOW_COPYING(Context);
- public:
- /** this is probably what you want */
- Context(OperationContext* txn, const std::string& ns, bool doVersion = true);
-
- /**
- * Below still calls _finishInit, but assumes database has already been acquired
- * or just created.
- */
- Context(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().
- */
- Context(OperationContext* txn, const std::string& ns, Database * db);
-
- ~Context();
-
- Database* db() const { return _db; }
- const char* ns() const { return _ns.c_str(); }
-
- /** @return if the db was created by this Context */
- 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 Client::Context
-
-
- class WriteContext {
- MONGO_DISALLOW_COPYING(WriteContext);
- public:
- WriteContext(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;
- Context _c;
- Collection* _collection;
- };
-
};
/** get the Client object for this thread. */