diff options
Diffstat (limited to 'src/mongo/db/s/config/configsvr_enable_sharding_command.cpp')
-rw-r--r-- | src/mongo/db/s/config/configsvr_enable_sharding_command.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/mongo/db/s/config/configsvr_enable_sharding_command.cpp b/src/mongo/db/s/config/configsvr_enable_sharding_command.cpp index e9ca1356b62..22db41df749 100644 --- a/src/mongo/db/s/config/configsvr_enable_sharding_command.cpp +++ b/src/mongo/db/s/config/configsvr_enable_sharding_command.cpp @@ -39,6 +39,7 @@ #include "mongo/db/auth/authorization_session.h" #include "mongo/db/client.h" #include "mongo/db/commands.h" +#include "mongo/db/field_parser.h" #include "mongo/db/operation_context.h" #include "mongo/db/repl/read_concern_args.h" #include "mongo/db/s/config/sharding_catalog_manager.h" @@ -75,6 +76,8 @@ public: return true; } + static constexpr StringData kShardNameField = "primaryShard"_sd; + std::string help() const override { return "Internal command, which is exported by the sharding config server. Do not call " "directly. Enable sharding on a database."; @@ -109,6 +112,14 @@ public: const std::string dbname = parseNs("", cmdObj); + auto shardElem = cmdObj[kShardNameField]; + ShardId shardId = shardElem.ok() ? ShardId(shardElem.String()) : ShardId(); + + // If assigned, check that the shardId is valid + uassert(ErrorCodes::BadValue, + str::stream() << "invalid shard name: " << shardId, + !shardElem.ok() || shardId.isValid()); + uassert( ErrorCodes::InvalidNamespace, str::stream() << "invalid db name specified: " << dbname, @@ -131,13 +142,12 @@ public: uassertStatusOK(Grid::get(opCtx)->catalogClient()->getDistLockManager()->lock( opCtx, dbname, "enableSharding", DistLockManager::kDefaultLockTimeout)); - ShardingCatalogManager::get(opCtx)->enableSharding(opCtx, dbname); + ShardingCatalogManager::get(opCtx)->enableSharding(opCtx, dbname, shardId); audit::logEnableSharding(Client::getCurrent(), dbname); return true; } } configsvrEnableShardingCmd; - } // namespace } // namespace mongo |