summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaloian Manassiev <kaloian.manassiev@mongodb.com>2014-08-07 17:27:07 -0400
committerKaloian Manassiev <kaloian.manassiev@mongodb.com>2014-08-07 17:27:07 -0400
commitd261864e9156af7ecc3d0491111dffa0161e9d0d (patch)
tree03f46a2239a47a3eaca2ffab36e2a0bd94de5932
parent1cef2222eab85ec6b2c494116f4a576736516f7f (diff)
downloadmongo-d261864e9156af7ecc3d0491111dffa0161e9d0d.tar.gz
Revert "SERVER-14728 Shard depends on string comparison of replica set connection string"
This reverts commit b3787777795434829a3b512c06b5a0a508d81467.
-rw-r--r--src/mongo/s/shard.cpp50
1 files changed, 13 insertions, 37 deletions
diff --git a/src/mongo/s/shard.cpp b/src/mongo/s/shard.cpp
index 6f3a13d7887..48d4ad969ee 100644
--- a/src/mongo/s/shard.cpp
+++ b/src/mongo/s/shard.cpp
@@ -155,48 +155,24 @@ namespace mongo {
return ShardPtr();
}
- ShardPtr find(const string& ident) {
- string errmsg;
- ConnectionString connStr = ConnectionString::parse(ident, errmsg);
+ ShardPtr find( const string& ident ) {
+ string mykey = ident;
- uassert(18642, str::stream() << "Error parsing connection string: " << ident,
- errmsg.empty());
-
- if (connStr.type() == ConnectionString::SET) {
- scoped_lock lk(_rsMutex);
- ShardMap::iterator iter = _rsLookup.find(connStr.getSetName());
-
- if (iter == _rsLookup.end()) {
- return ShardPtr();
- }
-
- return iter->second;
- }
- else {
- scoped_lock lk(_mutex);
- ShardMap::iterator iter = _lookup.find(ident);
-
- if (iter == _rsLookup.end()) {
- return ShardPtr();
- }
-
- return iter->second;
- }
- }
-
- ShardPtr findWithRetry(const string& ident) {
- ShardPtr shard(find(ident));
+ {
+ scoped_lock lk( _mutex );
+ ShardMap::iterator i = _lookup.find( mykey );
- if (shard != NULL) {
- return shard;
+ if ( i != _lookup.end() )
+ return i->second;
}
// not in our maps, re-load all
reload();
- shard = find(ident);
- massert(13129 , str::stream() << "can't find shard for: " << ident, shard != NULL);
- return shard;
+ scoped_lock lk( _mutex );
+ ShardMap::iterator i = _lookup.find( mykey );
+ massert( 13129 , (string)"can't find shard for: " + mykey , i != _lookup.end() );
+ return i->second;
}
// Lookup shard by replica set name. Returns Shard::EMTPY if the name can't be found.
@@ -206,12 +182,12 @@ namespace mongo {
scoped_lock lk( _rsMutex );
ShardMap::iterator i = _rsLookup.find( name );
- return (i == _rsLookup.end()) ? Shard::EMPTY : *(i->second.get());
+ return (i == _rsLookup.end()) ? Shard::EMPTY : i->second.get();
}
// Useful for ensuring our shard data will not be modified while we use it
Shard findCopy( const string& ident ){
- ShardPtr found = findWithRetry(ident);
+ ShardPtr found = find( ident );
scoped_lock lk( _mutex );
massert( 13128 , (string)"can't find shard for: " + ident , found.get() );
return *found.get();