summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mongo/db/catalog/database.cpp4
-rw-r--r--src/mongo/db/catalog/database.h5
-rw-r--r--src/mongo/db/catalog/database_holder.cpp14
-rw-r--r--src/mongo/db/catalog/database_holder.h20
-rw-r--r--src/mongo/db/instance.cpp2
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());