mirror of https://github.com/mongodb/mongo
74 lines
3.3 KiB
JavaScript
74 lines
3.3 KiB
JavaScript
/**
|
|
* Tests that the cluster parameter "shardedClusterCardinalityForDirectConns" has the correct value
|
|
* after addShard and removeShard commands.
|
|
*/
|
|
|
|
import {FeatureFlagUtil} from "jstests/libs/feature_flag_util.js";
|
|
import {ReplSetTest} from "jstests/libs/replsettest.js";
|
|
import {ShardingTest} from "jstests/libs/shardingtest.js";
|
|
import {checkClusterParameter} from "jstests/sharding/libs/cluster_cardinality_parameter_util.js";
|
|
import {removeShard} from "jstests/sharding/libs/remove_shard_util.js";
|
|
|
|
const st = new ShardingTest({shards: 1});
|
|
|
|
jsTest.log("Checking the cluster parameter while the cluster contains one shard");
|
|
// There is only one shard in the cluster, so the cluster parameter should be false.
|
|
checkClusterParameter(st.configRS, false);
|
|
checkClusterParameter(st.rs0, false);
|
|
|
|
const shard1Name = "shard1";
|
|
const shard1Rst = new ReplSetTest({name: shard1Name, nodes: 1});
|
|
shard1Rst.startSet({shardsvr: ""});
|
|
shard1Rst.initiate();
|
|
assert.commandWorked(st.s.adminCommand({addShard: shard1Rst.getURL(), name: shard1Name}));
|
|
|
|
jsTest.log("Checking the cluster parameter while the cluster contains two shards");
|
|
// The addShard command should set the cluster parameter to true.
|
|
checkClusterParameter(st.configRS, true);
|
|
checkClusterParameter(st.rs0, true);
|
|
checkClusterParameter(shard1Rst, true);
|
|
|
|
removeShard(st, shard1Name);
|
|
|
|
jsTest.log("Checking the cluster parameter while the cluster contains one shard again");
|
|
// The removeShard command should set to cluster parameter to false if the config server primary's
|
|
// binVersion is 7.3 or the replica set endpoint feature flag is enabled.
|
|
let binVersion = assert.commandWorked(st.configRS.getPrimary().adminCommand({serverStatus: 1})).version;
|
|
let rsEndpointEnabled = FeatureFlagUtil.isPresentAndEnabled(st.configRS.getPrimary(), "ReplicaSetEndpoint");
|
|
const expectedHasTwoOrMoreShards = MongoRunner.compareBinVersions(binVersion, "7.3") != 0 && !rsEndpointEnabled;
|
|
checkClusterParameter(st.configRS, expectedHasTwoOrMoreShards);
|
|
checkClusterParameter(st.rs0, expectedHasTwoOrMoreShards);
|
|
|
|
assert.commandWorked(st.s.adminCommand({addShard: shard1Rst.getURL(), name: shard1Name}));
|
|
|
|
jsTest.log("Checking the cluster parameter while the cluster contains two shards again");
|
|
// The addShard command should set the cluster parameter to true again.
|
|
checkClusterParameter(st.configRS, true);
|
|
checkClusterParameter(st.rs0, true);
|
|
checkClusterParameter(shard1Rst, true);
|
|
|
|
const shard2Name = "shard2";
|
|
const shard2Rst = new ReplSetTest({name: shard2Name, nodes: 1});
|
|
shard2Rst.startSet({shardsvr: ""});
|
|
shard2Rst.initiate();
|
|
assert.commandWorked(st.s.adminCommand({addShard: shard2Rst.getURL(), name: shard2Name}));
|
|
|
|
jsTest.log("Checking the cluster parameter while the cluster contains three shards");
|
|
// The addShard command should not change the cluster parameter, i.e. it should remain true.
|
|
checkClusterParameter(st.configRS, true);
|
|
checkClusterParameter(st.rs0, true);
|
|
checkClusterParameter(shard1Rst, true);
|
|
checkClusterParameter(shard2Rst, true);
|
|
|
|
removeShard(st, shard2Name);
|
|
|
|
jsTest.log("Checking the cluster parameter while the cluster contains two shards again");
|
|
// The removeShard command should not change the cluster parameter, i.e. it should remain true.
|
|
checkClusterParameter(st.configRS, true);
|
|
checkClusterParameter(st.rs0, true);
|
|
checkClusterParameter(shard1Rst, true);
|
|
|
|
shard1Rst.stopSet();
|
|
shard2Rst.stopSet();
|
|
st.stop();
|