summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTommaso Tocci <tommaso.tocci@mongodb.com>2022-03-21 17:17:01 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-03-21 23:07:25 +0000
commitbfdbbb2a3ce0bfa598ea89a5d8e80a9d683e3931 (patch)
treeb9a769cc1e612f0db9e519eb3dc25d276e3c4e7c
parent3770d1e8611bb316b3aa478b4359f6375b537f54 (diff)
downloadmongo-bfdbbb2a3ce0bfa598ea89a5d8e80a9d683e3931.tar.gz
SERVER-64651 Prevent refineCollectionShardKey to run on config server
(cherry picked from commit ece9ffb3227b8e69d8908ae0d0437701d9847a77)
-rw-r--r--jstests/sharding/refine_collection_shard_key_basic.js5
-rw-r--r--src/mongo/db/s/shardsvr_refine_collection_shard_key_command.cpp4
2 files changed, 9 insertions, 0 deletions
diff --git a/jstests/sharding/refine_collection_shard_key_basic.js b/jstests/sharding/refine_collection_shard_key_basic.js
index a751083e47c..d4418ca256f 100644
--- a/jstests/sharding/refine_collection_shard_key_basic.js
+++ b/jstests/sharding/refine_collection_shard_key_basic.js
@@ -274,6 +274,11 @@ assert.commandFailedWithCode(
mongos.adminCommand({refineCollectionShardKey: kNsName, key: {_id: 1, aKey: 1}}),
ErrorCodes.NamespaceNotSharded);
+// Should fail because operation can't run on config server
+assert.commandFailedWithCode(
+ mongos.adminCommand({refineCollectionShardKey: "config.collections", key: {_id: 1, aKey: 1}}),
+ ErrorCodes.NoShardingEnabled);
+
enableShardingAndShardColl({_id: 1});
// Should fail because shard key is invalid (i.e. bad values).
diff --git a/src/mongo/db/s/shardsvr_refine_collection_shard_key_command.cpp b/src/mongo/db/s/shardsvr_refine_collection_shard_key_command.cpp
index fdd0c12131c..0797b59f3bd 100644
--- a/src/mongo/db/s/shardsvr_refine_collection_shard_key_command.cpp
+++ b/src/mongo/db/s/shardsvr_refine_collection_shard_key_command.cpp
@@ -32,6 +32,7 @@
#include "mongo/db/auth/authorization_session.h"
#include "mongo/db/commands.h"
#include "mongo/db/s/refine_collection_shard_key_coordinator.h"
+#include "mongo/db/s/sharding_state.h"
#include "mongo/s/request_types/refine_collection_shard_key_gen.h"
#include "mongo/s/request_types/sharded_ddl_commands_gen.h"
@@ -62,6 +63,9 @@ public:
using InvocationBase::InvocationBase;
void typedRun(OperationContext* opCtx) {
+ uassertStatusOK(ShardingState::get(opCtx)->canAcceptShardedCommands());
+ opCtx->setAlwaysInterruptAtStepDownOrUp();
+
auto coordinatorDoc = RefineCollectionShardKeyCoordinatorDocument();
coordinatorDoc.setShardingDDLCoordinatorMetadata(
{{ns(), DDLCoordinatorTypeEnum::kRefineCollectionShardKey}});