summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/config/configsvr_enable_sharding_command.cpp
diff options
context:
space:
mode:
authorMarcos José Grillo Ramírez <marcos.grillo@10gen.com>2019-11-06 16:51:39 +0000
committerevergreen <evergreen@mongodb.com>2019-11-06 16:51:39 +0000
commit6ef06c9093462bec22c2219c341b0219f1864cca (patch)
tree902db55296b0edea2798f3c61d93d77eef83fa0c /src/mongo/db/s/config/configsvr_enable_sharding_command.cpp
parent39c08aceaf7fa15a8e65cf80b09863b452425426 (diff)
downloadmongo-6ef06c9093462bec22c2219c341b0219f1864cca.tar.gz
SERVER-31083 Allow passing primary shard to "enableSharding" command for a new database
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