diff options
author | Misha Tyulenev <misha@mongodb.com> | 2018-01-21 15:25:24 -0500 |
---|---|---|
committer | Misha Tyulenev <misha@mongodb.com> | 2018-01-21 15:26:46 -0500 |
commit | b251fd633d7572c0b221df3b316534596e981041 (patch) | |
tree | 52ad9e73dae57cb99f7e278a791d912c48086482 /src/mongo/db | |
parent | 42c264630fa1e7d5924c291a9eeac6522d70f31e (diff) | |
download | mongo-b251fd633d7572c0b221df3b316534596e981041.tar.gz |
SERVER-32569 allow config servers and shard replica sets to start in non-cluster mode
Diffstat (limited to 'src/mongo/db')
-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.cpp | 5 |
6 files changed, 36 insertions, 8 deletions
diff --git a/src/mongo/db/SConscript b/src/mongo/db/SConscript index d158ff5ad33..44dd1a80f36 100644 --- a/src/mongo/db/SConscript +++ b/src/mongo/db/SConscript @@ -423,6 +423,7 @@ env.Library( LIBDEPS=[ '$BUILD_DIR/mongo/db/storage/mmap_v1/mmap_v1_options', 'repl/repl_settings', + 'repl/replica_set_messages', 'server_options', 'storage/storage_options', ], diff --git a/src/mongo/db/mongod_options.cpp b/src/mongo/db/mongod_options.cpp index 6e68a66f3fb..67b8b63545e 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; Status addMongodOptions(moe::OptionSection* options) { @@ -667,14 +668,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"); @@ -1282,6 +1282,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 05bb6d8d5a5..f4b8d197526 100644 --- a/src/mongo/db/mongod_options.h +++ b/src/mongo/db/mongod_options.h @@ -52,6 +52,8 @@ struct MongodGlobalParams { boost::optional<std::vector<std::string>> whitelistedClusterNetwork; }; +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 15890c6cf0e..a5ff6d4b066 100644 --- a/src/mongo/db/repl/SConscript +++ b/src/mongo/db/repl/SConscript @@ -1029,12 +1029,12 @@ env.Library('replica_set_messages', 'handshake_args.cpp', 'is_master_response.cpp', 'member_config.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 f4514a52322..cff88ad368a 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; @@ -569,7 +577,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.cpp b/src/mongo/db/repl/topology_coordinator.cpp index 7a91b1c1c13..8960db9792a 100644 --- a/src/mongo/db/repl/topology_coordinator.cpp +++ b/src/mongo/db/repl/topology_coordinator.cpp @@ -37,6 +37,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/handshake_args.h" #include "mongo/db/repl/heartbeat_response_action.h" @@ -2757,7 +2758,7 @@ MemberState TopologyCoordinator::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); @@ -2766,7 +2767,7 @@ MemberState TopologyCoordinator::getMemberState() const { } } } else { - if (_options.clusterRole == ClusterRole::ConfigServer) { + if (_options.clusterRole == ClusterRole::ConfigServer && !skipShardingConfigurationChecks) { return MemberState::RS_REMOVED; } } |