diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/SConscript | 1 | ||||
-rw-r--r-- | src/mongo/db/mongod_options.cpp | 23 | ||||
-rw-r--r-- | src/mongo/db/mongod_options.h | 2 | ||||
-rw-r--r-- | src/mongo/db/repl/SConscript | 2 | ||||
-rw-r--r-- | src/mongo/db/repl/repl_set_config.cpp | 11 | ||||
-rw-r--r-- | src/mongo/db/repl/topology_coordinator_impl.cpp | 5 | ||||
-rw-r--r-- | src/mongo/shell/replsettest.js | 4 | ||||
-rw-r--r-- | src/mongo/shell/shardingtest.js | 6 |
8 files changed, 43 insertions, 11 deletions
diff --git a/src/mongo/db/SConscript b/src/mongo/db/SConscript index 893d352854d..ded6480875c 100644 --- a/src/mongo/db/SConscript +++ b/src/mongo/db/SConscript @@ -445,6 +445,7 @@ env.Library( LIBDEPS=[ '$BUILD_DIR/mongo/db/serveronly', '$BUILD_DIR/mongo/util/options_parser/options_parser_init', + 'repl/replica_set_messages', 'server_options', ], ) diff --git a/src/mongo/db/mongod_options.cpp b/src/mongo/db/mongod_options.cpp index 307d6ace41a..c4b2283ef40 100644 --- a/src/mongo/db/mongod_options.cpp +++ b/src/mongo/db/mongod_options.cpp @@ -58,6 +58,7 @@ using std::cout; using std::endl; using std::string; + MongodGlobalParams mongodGlobalParams; extern DiagLog _diaglog; @@ -685,14 +686,13 @@ Status validateMongodOptions(const moe::Environment& params) { } } - bool isClusterRoleShard = false; + bool isClusterRoleShard = params.count("shardsvr"); if (params.count("sharding.clusterRole")) { auto clusterRole = params["sharding.clusterRole"].as<std::string>(); - isClusterRoleShard = (clusterRole == "shardsvr"); + isClusterRoleShard = isClusterRoleShard || (clusterRole == "shardsvr"); } - if ((isClusterRoleShard || params.count("shardsvr")) && - !params.count("sharding._overrideShardIdentity")) { + if (isClusterRoleShard && !params.count("sharding._overrideShardIdentity")) { return Status( ErrorCodes::BadValue, "shardsvr cluster role with queryableBackupMode requires _overrideShardIdentity"); @@ -1328,6 +1328,21 @@ Status storeMongodOptions(const moe::Environment& params) { log() << endl; } + bool isClusterRoleShard = params.count("shardsvr"); + bool isClusterRoleConfig = params.count("configsvr"); + if (params.count("sharding.clusterRole")) { + auto clusterRole = params["sharding.clusterRole"].as<std::string>(); + isClusterRoleShard = isClusterRoleShard || (clusterRole == "shardsvr"); + isClusterRoleConfig = isClusterRoleConfig || (clusterRole == "configsvr"); + } + + if ((isClusterRoleShard || isClusterRoleConfig) && skipShardingConfigurationChecks) { + auto clusterRoleStr = isClusterRoleConfig ? "--configsvr" : "--shardsvr"; + return Status(ErrorCodes::BadValue, + str::stream() << "Can not specify " << clusterRoleStr + << " and set skipShardingConfigurationChecks=true"); + } + setGlobalReplSettings(replSettings); return Status::OK(); } diff --git a/src/mongo/db/mongod_options.h b/src/mongo/db/mongod_options.h index 27fb778cfdf..481edacc96f 100644 --- a/src/mongo/db/mongod_options.h +++ b/src/mongo/db/mongod_options.h @@ -50,6 +50,8 @@ struct MongodGlobalParams { MongodGlobalParams() : scriptingEnabled(true) {} }; +extern bool skipShardingConfigurationChecks; + extern MongodGlobalParams mongodGlobalParams; Status addMongodOptions(moe::OptionSection* options); diff --git a/src/mongo/db/repl/SConscript b/src/mongo/db/repl/SConscript index 05dbeff18a0..31f35d384f8 100644 --- a/src/mongo/db/repl/SConscript +++ b/src/mongo/db/repl/SConscript @@ -631,12 +631,12 @@ env.Library('replica_set_messages', 'is_master_response.cpp', 'member_config.cpp', 'old_update_position_args.cpp', + 'repl_set_config.cpp', 'repl_set_heartbeat_args.cpp', 'repl_set_heartbeat_args_v1.cpp', 'repl_set_heartbeat_response.cpp', 'repl_set_html_summary.cpp', 'repl_set_request_votes_args.cpp', - 'repl_set_config.cpp', 'repl_set_tag.cpp', 'update_position_args.cpp', 'last_vote.cpp', diff --git a/src/mongo/db/repl/repl_set_config.cpp b/src/mongo/db/repl/repl_set_config.cpp index 1ad2d245ac6..024c3ff04a5 100644 --- a/src/mongo/db/repl/repl_set_config.cpp +++ b/src/mongo/db/repl/repl_set_config.cpp @@ -35,11 +35,19 @@ #include "mongo/bson/util/bson_check.h" #include "mongo/bson/util/bson_extract.h" #include "mongo/db/jsobj.h" +#include "mongo/db/mongod_options.h" #include "mongo/db/server_options.h" +#include "mongo/db/server_parameters.h" #include "mongo/stdx/functional.h" #include "mongo/util/stringutils.h" namespace mongo { +/** + * Dont run any sharding validations. Can not be combined with --configsvr or shardvr. Intended to + * allow restarting config server or shard as an independent replica set. + */ +MONGO_EXPORT_STARTUP_SERVER_PARAMETER(skipShardingConfigurationChecks, bool, false); + namespace repl { const size_t ReplSetConfig::kMaxMembers; @@ -552,7 +560,8 @@ Status ReplSetConfig::validate() const { "servers cannot have a non-zero slaveDelay"); } } - if (serverGlobalParams.clusterRole != ClusterRole::ConfigServer) { + if (serverGlobalParams.clusterRole != ClusterRole::ConfigServer && + !skipShardingConfigurationChecks) { return Status(ErrorCodes::BadValue, "Nodes being used for config servers must be started with the " "--configsvr flag"); diff --git a/src/mongo/db/repl/topology_coordinator_impl.cpp b/src/mongo/db/repl/topology_coordinator_impl.cpp index 50717f92393..f5302008206 100644 --- a/src/mongo/db/repl/topology_coordinator_impl.cpp +++ b/src/mongo/db/repl/topology_coordinator_impl.cpp @@ -36,6 +36,7 @@ #include "mongo/db/audit.h" #include "mongo/db/client.h" +#include "mongo/db/mongod_options.h" #include "mongo/db/operation_context.h" #include "mongo/db/repl/heartbeat_response_action.h" #include "mongo/db/repl/is_master_response.h" @@ -2232,7 +2233,7 @@ MemberState TopologyCoordinatorImpl::getMemberState() const { } if (_rsConfig.isConfigServer()) { - if (_options.clusterRole != ClusterRole::ConfigServer) { + if (_options.clusterRole != ClusterRole::ConfigServer && !skipShardingConfigurationChecks) { return MemberState::RS_REMOVED; } else { invariant(_storageEngineSupportsReadCommitted != ReadCommittedSupport::kUnknown); @@ -2241,7 +2242,7 @@ MemberState TopologyCoordinatorImpl::getMemberState() const { } } } else { - if (_options.clusterRole == ClusterRole::ConfigServer) { + if (_options.clusterRole == ClusterRole::ConfigServer && !skipShardingConfigurationChecks) { return MemberState::RS_REMOVED; } } diff --git a/src/mongo/shell/replsettest.js b/src/mongo/shell/replsettest.js index 0e05a1bfa4a..af7630b8065 100644 --- a/src/mongo/shell/replsettest.js +++ b/src/mongo/shell/replsettest.js @@ -470,7 +470,7 @@ var ReplSetTest = function(opts) { * * @param options - The options passed to {@link MongoRunner.runMongod} */ - this.startSet = function(options) { + this.startSet = function(options, restart) { print("ReplSetTest starting set"); if (options && options.keyFile) { @@ -482,7 +482,7 @@ var ReplSetTest = function(opts) { var nodes = []; for (var n = 0; n < this.ports.length; n++) { - nodes.push(this.start(n, options)); + nodes.push(this.start(n, options, restart)); } this.nodes = nodes; diff --git a/src/mongo/shell/shardingtest.js b/src/mongo/shell/shardingtest.js index 9b06dcd89ce..7a0fdae70f3 100644 --- a/src/mongo/shell/shardingtest.js +++ b/src/mongo/shell/shardingtest.js @@ -370,10 +370,14 @@ var ShardingTest = function(params) { } }; - this.stop = function(opts) { + this.stopAllMongos = function(opts) { for (var i = 0; i < this._mongos.length; i++) { this.stopMongos(i, opts); } + }; + + this.stop = function(opts) { + this.stopAllMongos(opts); for (var i = 0; i < this._connections.length; i++) { if (this._rs[i]) { |