diff options
author | Mathias Stearn <mathias@10gen.com> | 2014-07-15 11:45:46 -0400 |
---|---|---|
committer | Mathias Stearn <mathias@10gen.com> | 2014-07-28 11:59:20 -0400 |
commit | ece23f5a892d74360038f4f11f54c11e43f432cd (patch) | |
tree | cd341a4a139001394b355c13c08d723ea9ed7f00 /src | |
parent | e3b915cec0233b4fcb5c1cd558cc57790b7b7386 (diff) | |
download | mongo-ece23f5a892d74360038f4f11f54c11e43f432cd.tar.gz |
SERVER-13635 Use StringData and StringMap in DBHolder
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/catalog/database.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/catalog/database.h | 5 | ||||
-rw-r--r-- | src/mongo/db/catalog/database_holder.cpp | 14 | ||||
-rw-r--r-- | src/mongo/db/catalog/database_holder.h | 20 | ||||
-rw-r--r-- | src/mongo/db/instance.cpp | 2 |
5 files changed, 24 insertions, 21 deletions
diff --git a/src/mongo/db/catalog/database.cpp b/src/mongo/db/catalog/database.cpp index 83ba92727c0..8546f9eb6a6 100644 --- a/src/mongo/db/catalog/database.cpp +++ b/src/mongo/db/catalog/database.cpp @@ -120,9 +120,9 @@ namespace mongo { } Database::Database(OperationContext* txn, - const std::string& name, + const StringData& name, DatabaseCatalogEntry* dbEntry ) - : _name(name), + : _name(name.toString()), _dbEntry( dbEntry ), _profileName(_name + ".system.profile"), _indexesName(_name + ".system.indexes"), diff --git a/src/mongo/db/catalog/database.h b/src/mongo/db/catalog/database.h index c13a12bbdbe..4d8ebf3b128 100644 --- a/src/mongo/db/catalog/database.h +++ b/src/mongo/db/catalog/database.h @@ -30,6 +30,7 @@ #pragma once +#include "mongo/base/string_data.h" #include "mongo/bson/bsonobj.h" #include "mongo/db/catalog/collection_options.h" #include "mongo/db/namespace_string.h" @@ -57,14 +58,14 @@ namespace mongo { public: // you probably need to be in dbHolderMutex when constructing this Database(OperationContext* txn, - const std::string& name, + const StringData& name, DatabaseCatalogEntry* dbEntry ); /* you must use this to close - there is essential code in this method that is not in the ~Database destructor. thus the destructor is private. this could be cleaned up one day... */ static void closeDatabase(OperationContext* txn, - const std::string& db); + const StringData& db); // do not use! ~Database(); // closes files and other cleanup see below. diff --git a/src/mongo/db/catalog/database_holder.cpp b/src/mongo/db/catalog/database_holder.cpp index 9f58707f0b8..22c1b300537 100644 --- a/src/mongo/db/catalog/database_holder.cpp +++ b/src/mongo/db/catalog/database_holder.cpp @@ -55,12 +55,12 @@ namespace mongo { } Database* DatabaseHolder::get(OperationContext* txn, - const std::string& ns) const { + const StringData& ns) const { txn->lockState()->assertAtLeastReadLocked(ns); SimpleMutex::scoped_lock lk(_m); - const std::string db = _todb( ns ); + const StringData db = _todb( ns ); DBs::const_iterator it = _dbs.find(db); if ( it != _dbs.end() ) return it->second; @@ -68,10 +68,10 @@ namespace mongo { } Database* DatabaseHolder::getOrCreate(OperationContext* txn, - const string& ns, + const StringData& ns, bool& justCreated) { - const string dbname = _todb( ns ); + const StringData dbname = _todb( ns ); invariant(txn->lockState()->isAtLeastReadLocked(dbname)); if (txn->lockState()->isWriteLocked() && FileAllocator::get()->hasFailed()) { @@ -81,7 +81,7 @@ namespace mongo { { SimpleMutex::scoped_lock lk(_m); { - DBs::iterator i = _dbs.find(dbname); + DBs::const_iterator i = _dbs.find(dbname); if( i != _dbs.end() ) { justCreated = false; return i->second; @@ -122,7 +122,7 @@ namespace mongo { } void DatabaseHolder::erase(OperationContext* txn, - const std::string& ns) { + const StringData& ns) { invariant(txn->lockState()->isW()); SimpleMutex::scoped_lock lk(_m); @@ -137,7 +137,7 @@ namespace mongo { getDur().commitNow(txn); // bad things happen if we close a DB with outstanding writes set< string > dbs; - for ( map<string,Database*>::iterator i = _dbs.begin(); i != _dbs.end(); i++ ) { + for ( DBs::const_iterator i = _dbs.begin(); i != _dbs.end(); ++i ) { dbs.insert( i->first ); } diff --git a/src/mongo/db/catalog/database_holder.h b/src/mongo/db/catalog/database_holder.h index 07f40f47b85..b6c874bf7a3 100644 --- a/src/mongo/db/catalog/database_holder.h +++ b/src/mongo/db/catalog/database_holder.h @@ -30,9 +30,11 @@ #pragma once +#include "mongo/base/string_data.h" #include "mongo/db/catalog/database.h" #include "mongo/db/d_concurrency.h" #include "mongo/db/namespace_string.h" +#include "mongo/util/string_map.h" namespace mongo { @@ -40,7 +42,7 @@ namespace mongo { * dbname -> Database */ class DatabaseHolder { - typedef std::map<std::string,Database*> DBs; + typedef StringMap<Database*> DBs; // todo: we want something faster than this if called a lot: mutable SimpleMutex _m; DBs _dbs; @@ -48,13 +50,13 @@ namespace mongo { DatabaseHolder() : _m("dbholder"){ } Database* get(OperationContext* txn, - const std::string& ns) const; + const StringData& ns) const; Database* getOrCreate(OperationContext* txn, - const std::string& ns, + const StringData& ns, bool& justCreated); - void erase(OperationContext* txn, const std::string& ns); + void erase(OperationContext* txn, const StringData& ns); /** @param force - force close even if something underway - use at shutdown */ bool closeAll(OperationContext* txn, @@ -66,18 +68,18 @@ namespace mongo { */ void getAllShortNames( std::set<std::string>& all ) const { SimpleMutex::scoped_lock lk(_m); - for( DBs::const_iterator j=_dbs.begin(); j!=_dbs.end(); j++ ) { + for( DBs::const_iterator j=_dbs.begin(); j!=_dbs.end(); ++j ) { all.insert( j->first ); } } private: - static std::string _todb( const std::string& ns ) { - std::string d = __todb( ns ); - uassert( 13280 , (std::string)"invalid db name: " + ns , NamespaceString::validDBName( d ) ); + static StringData _todb( const StringData& ns ) { + StringData d = __todb( ns ); + uassert(13280, "invalid db name: " + ns.toString(), NamespaceString::validDBName(d)); return d; } - static std::string __todb( const std::string& ns ) { + static StringData __todb( const StringData& ns ) { size_t i = ns.find( '.' ); if ( i == std::string::npos ) { uassert( 13074 , "db name can't be empty" , ns.size() ); diff --git a/src/mongo/db/instance.cpp b/src/mongo/db/instance.cpp index 22557762853..ad2f9fd8a19 100644 --- a/src/mongo/db/instance.cpp +++ b/src/mongo/db/instance.cpp @@ -536,7 +536,7 @@ namespace mongo { } /*static*/ - void Database::closeDatabase(OperationContext* txn, const string& db) { + void Database::closeDatabase(OperationContext* txn, const StringData& db) { // XXX? - Do we need to close database under global lock or just DB-lock is sufficient ? invariant(txn->lockState()->isW()); |