0
0
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:
Jack Mulrow 2019-09-24 18:59:52 +00:00 committed by evergreen
parent 1a3936b3ee
commit 393c9d79b9
2 changed files with 43 additions and 0 deletions

View 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();
}());

View File

@ -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) =