mirror of
https://github.com/mongodb/mongo.git
synced 2024-12-01 09:32:32 +01:00
SERVER-42367 Disallow refineCollectionShardKey in FCV < 4.4
This commit is contained in:
parent
1a3936b3ee
commit
393c9d79b9
36
jstests/multiVersion/refine_collection_shard_key_fcv.js
Normal file
36
jstests/multiVersion/refine_collection_shard_key_fcv.js
Normal file
@ -0,0 +1,36 @@
|
||||
// Verifies refineCollectionShardKey can only be run when a cluster's FCV is 4.4.
|
||||
|
||||
(function() {
|
||||
"use strict";
|
||||
|
||||
const dbName = "test";
|
||||
const collName = "foo";
|
||||
const ns = dbName + '.' + collName;
|
||||
|
||||
const st = new ShardingTest({shards: 1});
|
||||
const configAdminDB = st.configRS.getPrimary().getDB("admin");
|
||||
|
||||
assert.commandWorked(st.s.adminCommand({enableSharding: dbName}));
|
||||
assert.commandWorked(st.s.adminCommand({shardCollection: ns, key: {_id: 1}}));
|
||||
|
||||
// Create an index that can be used for the following shard key refines.
|
||||
assert.commandWorked(st.s.getCollection(ns).createIndex({_id: 1, x: 1, y: 1}));
|
||||
|
||||
// Refining a shard key succeeds in FCV 4.4.
|
||||
checkFCV(configAdminDB, latestFCV);
|
||||
assert.commandWorked(st.s.adminCommand({refineCollectionShardKey: ns, key: {_id: 1, x: 1}}));
|
||||
|
||||
// Refining a shard key fails in FCV 4.2.
|
||||
assert.commandWorked(st.s.adminCommand({setFeatureCompatibilityVersion: lastStableFCV}));
|
||||
checkFCV(configAdminDB, lastStableFCV);
|
||||
assert.commandFailedWithCode(
|
||||
st.s.adminCommand({refineCollectionShardKey: ns, key: {_id: 1, x: 1, y: 1}}),
|
||||
ErrorCodes.CommandNotSupported);
|
||||
|
||||
// Refining a shard key succeeds after upgrading back to FCV 4.4.
|
||||
assert.commandWorked(st.s.adminCommand({setFeatureCompatibilityVersion: latestFCV}));
|
||||
checkFCV(configAdminDB, latestFCV);
|
||||
assert.commandWorked(st.s.adminCommand({refineCollectionShardKey: ns, key: {_id: 1, x: 1, y: 1}}));
|
||||
|
||||
st.stop();
|
||||
}());
|
@ -37,6 +37,7 @@
|
||||
#include "mongo/db/repl/repl_client_info.h"
|
||||
#include "mongo/db/s/config/sharding_catalog_manager.h"
|
||||
#include "mongo/db/s/shard_key_util.h"
|
||||
#include "mongo/db/server_options.h"
|
||||
#include "mongo/s/catalog/dist_lock_manager.h"
|
||||
#include "mongo/s/grid.h"
|
||||
#include "mongo/s/request_types/refine_collection_shard_key_gen.h"
|
||||
@ -64,6 +65,12 @@ public:
|
||||
"refineCollectionShardKey must be called with majority writeConcern",
|
||||
opCtx->getWriteConcern().wMode == WriteConcernOptions::kMajority);
|
||||
|
||||
uassert(ErrorCodes::CommandNotSupported,
|
||||
"'refineCollectionShardKey' is only supported in feature compatibility version "
|
||||
"4.4",
|
||||
serverGlobalParams.featureCompatibility.getVersion() ==
|
||||
ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo44);
|
||||
|
||||
// Set the operation context read concern level to local for reads into the config
|
||||
// database.
|
||||
repl::ReadConcernArgs::get(opCtx) =
|
||||
|
Loading…
Reference in New Issue
Block a user