summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/config/configsvr_enable_sharding_command.cpp
diff options
context:
space:
mode:
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.cpp14
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