summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaloian Manassiev <kaloian.manassiev@mongodb.com>2015-06-04 15:05:12 -0400
committerKaloian Manassiev <kaloian.manassiev@mongodb.com>2015-06-04 19:24:53 -0400
commit7b6724f3ad2600514c3ae5e59af873de75b026df (patch)
treefacc7613e80a7e3a0a17e8149e2a57f90a4de08e
parentce2b1d11d42de93f7b375f7e6c41fb709f66e969 (diff)
downloadmongo-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.cpp6
-rw-r--r--src/mongo/s/commands/cluster_get_last_error_cmd.cpp3
-rw-r--r--src/mongo/s/config.cpp31
-rw-r--r--src/mongo/s/config.h7
-rw-r--r--src/mongo/s/d_migrate.cpp2
-rw-r--r--src/mongo/s/dbclient_shard_resolver.cpp70
-rw-r--r--src/mongo/s/dbclient_shard_resolver.h6
-rw-r--r--src/mongo/s/version_manager.cpp5
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,