Files
mongo/jstests/multiVersion/genericSetFCVUsage/test_sharding_startup_in_downgrading_state.js

114 lines
4.8 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";
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});
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();