119 lines
4.9 KiB
JavaScript
119 lines
4.9 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]
|
|
*/
|
|
|
|
(function() {
|
|
"use strict";
|
|
|
|
load('jstests/multiVersion/libs/verify_versions.js');
|
|
load('jstests/libs/fail_point_util.js');
|
|
load("jstests/libs/feature_flag_util.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}));
|
|
|
|
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}));
|
|
|
|
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();
|
|
})();
|