122 lines
5.3 KiB
JavaScript
122 lines
5.3 KiB
JavaScript
/*
|
|
* Tests startup with a node in downgrading state.
|
|
* Starts a sharded cluster with 2 shards, each with 2 nodes.
|
|
*
|
|
* @tags: [requires_fcv_70]
|
|
*/
|
|
import "jstests/multiVersion/libs/verify_versions.js";
|
|
|
|
import {ShardingTest} from "jstests/libs/shardingtest.js";
|
|
|
|
function runSharding() {
|
|
let fcvDoc;
|
|
let shard0PrimaryAdminDB;
|
|
let shard1PrimaryAdminDB;
|
|
let mongosAdminDB;
|
|
let configPrimary;
|
|
let configPrimaryAdminDB;
|
|
|
|
const st = new ShardingTest({
|
|
shards: {rs0: {nodes: 2}, rs1: {nodes: 2}},
|
|
config: 1,
|
|
mongos: 1,
|
|
// By default, our test infrastructure sets the election timeout to a very high value (24
|
|
// hours). For this test, we need a shorter election timeout because it relies on nodes
|
|
// running an election when they do not detect an active primary. Therefore, we are setting
|
|
// the electionTimeoutMillis to its default value.
|
|
initiateWithDefaultElectionTimeout: true,
|
|
});
|
|
|
|
mongosAdminDB = st.s.getDB("admin");
|
|
configPrimary = st.configRS.getPrimary();
|
|
configPrimaryAdminDB = configPrimary.getDB("admin");
|
|
shard0PrimaryAdminDB = st.shard0.getDB("admin");
|
|
shard1PrimaryAdminDB = st.shard1.getDB("admin");
|
|
|
|
// Check that the shards are using latest version.
|
|
fcvDoc = shard0PrimaryAdminDB.system.version.findOne({_id: "featureCompatibilityVersion"});
|
|
jsTestLog(`Shard0 version before downgrading: ${tojson(fcvDoc)}`);
|
|
checkFCV(shard0PrimaryAdminDB, latestFCV);
|
|
|
|
fcvDoc = shard1PrimaryAdminDB.system.version.findOne({_id: "featureCompatibilityVersion"});
|
|
jsTestLog(`Shard1 version before downgrading: ${tojson(fcvDoc)}`);
|
|
checkFCV(shard1PrimaryAdminDB, latestFCV);
|
|
|
|
// Set the failDowngrading failpoint so that the downgrading will fail.
|
|
assert.commandWorked(configPrimary.adminCommand({configureFailPoint: "failDowngrading", mode: "alwaysOn"}));
|
|
|
|
// Start downgrading. It will fail.
|
|
assert.commandFailed(mongosAdminDB.runCommand({setFeatureCompatibilityVersion: lastLTSFCV, confirm: true}));
|
|
|
|
st.rs0.awaitReplication();
|
|
st.rs1.awaitReplication();
|
|
|
|
// Check that the shards are in downgrading state.
|
|
fcvDoc = configPrimaryAdminDB.system.version.findOne({_id: "featureCompatibilityVersion"});
|
|
jsTestLog(`Config version after downgrading: ${tojson(fcvDoc)}`);
|
|
checkFCV(configPrimaryAdminDB, lastLTSFCV, lastLTSFCV);
|
|
|
|
fcvDoc = shard0PrimaryAdminDB.system.version.findOne({_id: "featureCompatibilityVersion"});
|
|
jsTestLog(`Shard0 version after downgrading: ${tojson(fcvDoc)}`);
|
|
checkFCV(shard0PrimaryAdminDB, lastLTSFCV, lastLTSFCV);
|
|
|
|
fcvDoc = shard1PrimaryAdminDB.system.version.findOne({_id: "featureCompatibilityVersion"});
|
|
jsTestLog(`Shard1 version after downgrading: ${tojson(fcvDoc)}`);
|
|
checkFCV(shard1PrimaryAdminDB, lastLTSFCV, lastLTSFCV);
|
|
|
|
// Restart the sharded cluster.
|
|
jsTestLog("Restarting the config server:");
|
|
st.restartConfigServer(0);
|
|
jsTestLog("Restarting the mongos:");
|
|
st.restartMongos(0);
|
|
jsTestLog("Restarting shard0:");
|
|
st.restartShardRS(0, {startClean: false}, undefined, true);
|
|
jsTestLog("Restarting shard1:");
|
|
st.restartShardRS(1, {startClean: false}, undefined, true);
|
|
|
|
st.waitForShardingInitialized();
|
|
|
|
// Check that the shards are in downgrading state after restarting.
|
|
configPrimary = st.configRS.getPrimary();
|
|
configPrimaryAdminDB = configPrimary.getDB("admin");
|
|
fcvDoc = configPrimaryAdminDB.system.version.findOne({_id: "featureCompatibilityVersion"});
|
|
jsTestLog(`Config version after restarting: ${tojson(fcvDoc)}`);
|
|
checkFCV(configPrimaryAdminDB, lastLTSFCV, lastLTSFCV);
|
|
|
|
shard0PrimaryAdminDB = st.shard0.getDB("admin");
|
|
fcvDoc = shard0PrimaryAdminDB.system.version.findOne({_id: "featureCompatibilityVersion"});
|
|
jsTestLog(`Shard0 version after restarting: ${tojson(fcvDoc)}`);
|
|
checkFCV(shard0PrimaryAdminDB, lastLTSFCV, lastLTSFCV);
|
|
|
|
shard1PrimaryAdminDB = st.shard1.getDB("admin");
|
|
fcvDoc = shard1PrimaryAdminDB.system.version.findOne({_id: "featureCompatibilityVersion"});
|
|
jsTestLog(`Shard1 version after restarting: ${tojson(fcvDoc)}`);
|
|
checkFCV(shard1PrimaryAdminDB, lastLTSFCV, lastLTSFCV);
|
|
|
|
// Upgrade the sharded cluster to upgraded (latestFCV).
|
|
mongosAdminDB = st.s.getDB("admin");
|
|
assert.commandWorked(mongosAdminDB.runCommand({setFeatureCompatibilityVersion: latestFCV, confirm: true}));
|
|
|
|
st.rs0.awaitReplication();
|
|
st.rs1.awaitReplication();
|
|
|
|
// Check that the shards are in upgraded state.
|
|
fcvDoc = configPrimaryAdminDB.system.version.findOne({_id: "featureCompatibilityVersion"});
|
|
jsTestLog(`Config version after successfully upgrading: ${tojson(fcvDoc)}`);
|
|
checkFCV(configPrimaryAdminDB, latestFCV);
|
|
|
|
shard0PrimaryAdminDB = st.shard0.getDB("admin");
|
|
fcvDoc = shard0PrimaryAdminDB.system.version.findOne({_id: "featureCompatibilityVersion"});
|
|
jsTestLog(`Shard0 version after successfully upgrading: ${tojson(fcvDoc)}`);
|
|
checkFCV(shard0PrimaryAdminDB, latestFCV);
|
|
|
|
shard1PrimaryAdminDB = st.shard1.getDB("admin");
|
|
fcvDoc = shard1PrimaryAdminDB.system.version.findOne({_id: "featureCompatibilityVersion"});
|
|
jsTestLog(`Shard1 version after successfully upgrading: ${tojson(fcvDoc)}`);
|
|
checkFCV(shard1PrimaryAdminDB, latestFCV);
|
|
|
|
st.stop();
|
|
}
|
|
|
|
runSharding();
|