diff options
author | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2015-06-04 15:05:12 -0400 |
---|---|---|
committer | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2015-06-04 19:24:53 -0400 |
commit | 7b6724f3ad2600514c3ae5e59af873de75b026df (patch) | |
tree | facc7613e80a7e3a0a17e8149e2a57f90a4de08e | |
parent | ce2b1d11d42de93f7b375f7e6c41fb709f66e969 (diff) | |
download | mongo-7b6724f3ad2600514c3ae5e59af873de75b026df.tar.gz |
SERVER-18127 Remove ConfigServer::modelServer
The config server connection string should only be needed for cases where
we need to send it to the remote servers as part of either set shard
version or initial shard handshake.
-rw-r--r-- | src/mongo/s/chunk.cpp | 6 | ||||
-rw-r--r-- | src/mongo/s/commands/cluster_get_last_error_cmd.cpp | 3 | ||||
-rw-r--r-- | src/mongo/s/config.cpp | 31 | ||||
-rw-r--r-- | src/mongo/s/config.h | 7 | ||||
-rw-r--r-- | src/mongo/s/d_migrate.cpp | 2 | ||||
-rw-r--r-- | src/mongo/s/dbclient_shard_resolver.cpp | 70 | ||||
-rw-r--r-- | src/mongo/s/dbclient_shard_resolver.h | 6 | ||||
-rw-r--r-- | src/mongo/s/version_manager.cpp | 5 |
8 files changed, 38 insertions, 92 deletions
diff --git a/src/mongo/s/chunk.cpp b/src/mongo/s/chunk.cpp index 300c6f712d6..10dffc6ef4b 100644 --- a/src/mongo/s/chunk.cpp +++ b/src/mongo/s/chunk.cpp @@ -444,7 +444,7 @@ namespace { cmd.append( "max" , getMax() ); cmd.append( "from" , getShard().getName() ); cmd.append( "splitKeys" , m ); - cmd.append( "configdb" , configServer.modelServer() ); + cmd.append("configdb", grid.catalogManager()->connectionString().toString()); cmd.append("epoch", _manager->getVersion().epoch()); BSONObj cmdObj = cmd.obj(); @@ -482,7 +482,6 @@ namespace { << _shard.toString() << " -> " << to.toString(); Shard from = _shard; - ScopedDbConnection fromconn(from.getConnString()); BSONObjBuilder builder; builder.append("moveChunk", _manager->getns()); @@ -495,7 +494,7 @@ namespace { builder.append("min", _min); builder.append("max", _max); builder.append("maxChunkSizeBytes", chunkSize); - builder.append("configdb", configServer.modelServer()); + builder.append("configdb", grid.catalogManager()->connectionString().toString()); // For legacy secondary throttle setting. bool secondaryThrottle = true; @@ -515,6 +514,7 @@ namespace { builder.append(LiteParsedQuery::cmdOptionMaxTimeMS, maxTimeMS); builder.append("epoch", _manager->getVersion().epoch()); + ScopedDbConnection fromconn(from.getConnString()); bool worked = fromconn->runCommand("admin", builder.done(), res); fromconn.done(); diff --git a/src/mongo/s/commands/cluster_get_last_error_cmd.cpp b/src/mongo/s/commands/cluster_get_last_error_cmd.cpp index a703d705b6d..45a1cc9792e 100644 --- a/src/mongo/s/commands/cluster_get_last_error_cmd.cpp +++ b/src/mongo/s/commands/cluster_get_last_error_cmd.cpp @@ -112,8 +112,7 @@ namespace { const HostOpTime& hot = it->second; ConnectionString resolvedHost; - status = DBClientShardResolver::findMaster(shardEndpoint.toString(), - &resolvedHost); + status = DBClientShardResolver::findMaster(shardEndpoint, &resolvedHost); if (!status.isOK()) { break; } diff --git a/src/mongo/s/config.cpp b/src/mongo/s/config.cpp index 453604a69dc..e54d37e5fb5 100644 --- a/src/mongo/s/config.cpp +++ b/src/mongo/s/config.cpp @@ -72,7 +72,6 @@ namespace mongo { using std::stringstream; using std::vector; - int ConfigServer::VERSION = 3; Shard Shard::EMPTY; @@ -665,11 +664,6 @@ namespace mongo { /* --- ConfigServer ---- */ - const std::string& ConfigServer::modelServer() const { - uassert(10190, "ConfigServer not setup", _primary.ok()); - return _primary.getConnString().toString(); - } - bool ConfigServer::init( const ConnectionString& configCS ) { invariant(configCS.isValid()); @@ -748,31 +742,6 @@ namespace mongo { return true; } - int ConfigServer::dbConfigVersion() { - ScopedDbConnection conn(_primary.getConnString(), 30.0); - int version = dbConfigVersion( conn.conn() ); - conn.done(); - return version; - } - - int ConfigServer::dbConfigVersion( DBClientBase& conn ) { - auto_ptr<DBClientCursor> c = conn.query( "config.version" , BSONObj() ); - int version = 0; - if ( c->more() ) { - BSONObj o = c->next(); - version = o["version"].numberInt(); - uassert( 10189 , "should only have 1 thing in config.version" , ! c->more() ); - } - else { - if (grid.catalogManager()->doShardsExist() || - conn.count(DatabaseType::ConfigNS)) { - version = 1; - } - } - - return version; - } - void ConfigServer::reloadSettings() { set<string> got; diff --git a/src/mongo/s/config.h b/src/mongo/s/config.h index a2fa72877a3..3d46baff52e 100644 --- a/src/mongo/s/config.h +++ b/src/mongo/s/config.h @@ -184,8 +184,6 @@ namespace mongo { bool ok( bool checkConsistency = false ); - const std::string& modelServer() const; - const Shard& getPrimary() const { return _primary; } /** @@ -200,15 +198,10 @@ namespace mongo { */ bool checkHostsAreUnique( const std::vector<std::string>& configHosts, std::string* errmsg ); - int dbConfigVersion(); - int dbConfigVersion( DBClientBase& conn ); - void reloadSettings(); void replicaSetChange(const std::string& setName, const std::string& newConnectionString); - static int VERSION; - private: std::string getHost( const std::string& name , bool withPort ); diff --git a/src/mongo/s/d_migrate.cpp b/src/mongo/s/d_migrate.cpp index 6e0422b4526..82b25e9eb13 100644 --- a/src/mongo/s/d_migrate.cpp +++ b/src/mongo/s/d_migrate.cpp @@ -1312,7 +1312,7 @@ namespace { recvChunkStartBuilder.append("min", min); recvChunkStartBuilder.append("max", max); recvChunkStartBuilder.append("shardKeyPattern", shardKeyPattern); - recvChunkStartBuilder.append("configServer", configServer.modelServer()); + recvChunkStartBuilder.append("configServer", shardingState.getConfigServer()); recvChunkStartBuilder.append("secondaryThrottle", isSecondaryThrottle); // Follow the same convention in moveChunk. diff --git a/src/mongo/s/dbclient_shard_resolver.cpp b/src/mongo/s/dbclient_shard_resolver.cpp index bac4bc858dc..8ae3df53cec 100644 --- a/src/mongo/s/dbclient_shard_resolver.cpp +++ b/src/mongo/s/dbclient_shard_resolver.cpp @@ -31,78 +31,62 @@ #include <set> #include "mongo/client/replica_set_monitor.h" -#include "mongo/s/config.h" #include "mongo/s/client/shard.h" +#include "mongo/s/client/shard_registry.h" +#include "mongo/s/grid.h" namespace mongo { using std::string; - Status DBClientShardResolver::chooseWriteHost( const string& shardName, - ConnectionString* shardHost ) const { - - // Declare up here for parsing later - string errMsg; - - // Special-case for config - if (shardName == "config") { - *shardHost = ConnectionString::parse( configServer.modelServer(), errMsg ); - dassert( errMsg == "" ); - return Status::OK(); - } - - // - // First get the information about the shard from the shard cache - // + Status DBClientShardResolver::chooseWriteHost(const string& shardName, + ConnectionString* shardHost) const { // Internally uses our shard cache, does no reload - Shard shard = Shard::findIfExists( shardName ); - if ( shard.getName() == "" ) { - return Status( ErrorCodes::ShardNotFound, - string("unknown shard name ") + shardName ); + boost::shared_ptr<Shard> shard = grid.shardRegistry()->findIfExists(shardName); + if (!shard) { + return Status(ErrorCodes::ShardNotFound, + str::stream() << "unknown shard name " << shardName); } - return findMaster(shard.getConnString().toString(), shardHost); - } - Status DBClientShardResolver::findMaster( const std::string connString, - ConnectionString* resolvedHost ) { - std::string errMsg; + return findMaster(shard->getConnString(), shardHost); + } - ConnectionString rawHost = ConnectionString::parse( connString, errMsg ); - dassert( errMsg == "" ); - dassert( rawHost.type() == ConnectionString::SET - || rawHost.type() == ConnectionString::MASTER ); + Status DBClientShardResolver::findMaster(const ConnectionString& connString, + ConnectionString* resolvedHost) { - if ( rawHost.type() == ConnectionString::MASTER ) { - *resolvedHost = rawHost; + if (connString.type() == ConnectionString::MASTER) { + *resolvedHost = connString; return Status::OK(); } + dassert(connString.type() == ConnectionString::SET); + // // If we need to, then get the particular node we're targeting in the replica set // // Don't create the monitor unless we need to - fast path - ReplicaSetMonitorPtr replMonitor = ReplicaSetMonitor::get(rawHost.getSetName()); + ReplicaSetMonitorPtr replMonitor = ReplicaSetMonitor::get(connString.getSetName()); if (!replMonitor) { // Slow path - std::set<HostAndPort> seedServers(rawHost.getServers().begin(), - rawHost.getServers().end()); - ReplicaSetMonitor::createIfNeeded(rawHost.getSetName(), seedServers); - replMonitor = ReplicaSetMonitor::get(rawHost.getSetName()); + std::set<HostAndPort> seedServers(connString.getServers().begin(), + connString.getServers().end()); + ReplicaSetMonitor::createIfNeeded(connString.getSetName(), seedServers); + + replMonitor = ReplicaSetMonitor::get(connString.getSetName()); } if (!replMonitor) { - return Status( ErrorCodes::ReplicaSetNotFound, - string("unknown replica set ") + rawHost.getSetName() ); + return Status(ErrorCodes::ReplicaSetNotFound, + str::stream() << "unknown replica set " << connString.getSetName()); } try { // This can throw when we don't find a master! HostAndPort masterHostAndPort = replMonitor->getMasterOrUassert(); - *resolvedHost = ConnectionString::parse( masterHostAndPort.toString(), errMsg ); - dassert( errMsg == "" ); + *resolvedHost = fassertStatusOK(0, ConnectionString::parse(masterHostAndPort.toString())); return Status::OK(); } catch ( const DBException& ) { @@ -111,9 +95,7 @@ namespace mongo { + replMonitor->getName() ); } - // Unreachable - dassert( false ); - return Status( ErrorCodes::UnknownError, "" ); + MONGO_UNREACHABLE; } } // namespace mongo diff --git a/src/mongo/s/dbclient_shard_resolver.h b/src/mongo/s/dbclient_shard_resolver.h index 960d038c9c7..fb7beb26ee5 100644 --- a/src/mongo/s/dbclient_shard_resolver.h +++ b/src/mongo/s/dbclient_shard_resolver.h @@ -60,11 +60,13 @@ namespace mongo { Status chooseWriteHost( const std::string& shardName, ConnectionString* shardHost ) const; /** - * Resolves a replica set connection std::string to a master, if possible. + * Resolves a replica set connection string to a master or returns an error. + * * Returns HostNotFound if the master is not reachable * Returns ReplicaSetNotFound if the replica set is not being tracked */ - static Status findMaster( const std::string connString, ConnectionString* resolvedHost ); + static Status findMaster(const ConnectionString& connString, + ConnectionString* resolvedHost); }; diff --git a/src/mongo/s/version_manager.cpp b/src/mongo/s/version_manager.cpp index 9939d2ced18..b101844c444 100644 --- a/src/mongo/s/version_manager.cpp +++ b/src/mongo/s/version_manager.cpp @@ -39,6 +39,7 @@ #include "mongo/client/dbclient_rs.h" #include "mongo/db/namespace_string.h" #include "mongo/s/catalog/catalog_cache.h" +#include "mongo/s/catalog/catalog_manager.h" #include "mongo/s/chunk_manager.h" #include "mongo/s/chunk_version.h" #include "mongo/s/client/shard_connection.h" @@ -206,7 +207,7 @@ namespace mongo { ok = setShardVersion(*conn, "", - configServer.modelServer(), + grid.catalogManager()->connectionString().toString(), ChunkVersion(), NULL, true, @@ -377,7 +378,7 @@ namespace mongo { BSONObj result; if (setShardVersion(*conn, ns, - configServer.modelServer(), + grid.catalogManager()->connectionString().toString(), version, manager.get(), authoritative, |