2021-10-25 16:56:41 +00:00
|
|
|
/*
|
2024-03-19 01:58:48 +06:00
|
|
|
* Tests that an arbiter will always be on the latest FCV regardless of the FCV of the replica set.
|
2021-10-25 16:56:41 +00:00
|
|
|
*/
|
2024-08-20 17:54:15 -04:00
|
|
|
import {ReplSetTest} from "jstests/libs/replsettest.js";
|
|
|
|
|
|
2021-10-25 16:56:41 +00:00
|
|
|
function runTest(FCV) {
|
2024-03-19 01:58:48 +06:00
|
|
|
let rst = new ReplSetTest({nodes: [{}, {rsConfig: {arbiterOnly: true}}]});
|
2021-10-25 16:56:41 +00:00
|
|
|
rst.startSet();
|
|
|
|
|
rst.initiate();
|
|
|
|
|
|
2024-03-19 01:58:48 +06:00
|
|
|
const primary = rst.getPrimary();
|
|
|
|
|
if (FCV != latestFCV) {
|
2025-08-21 10:17:44 -07:00
|
|
|
assert.commandWorked(primary.getDB("admin").runCommand({setFeatureCompatibilityVersion: FCV, confirm: true}));
|
2024-03-19 01:58:48 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const primaryFCV = assert.commandWorked(
|
2025-08-21 10:17:44 -07:00
|
|
|
primary.getDB("admin").runCommand({getParameter: 1, featureCompatibilityVersion: 1}),
|
|
|
|
|
);
|
2024-03-19 01:58:48 +06:00
|
|
|
assert.eq(primaryFCV.featureCompatibilityVersion.version, FCV, tojson(primaryFCV));
|
|
|
|
|
|
|
|
|
|
// The arbiter should always have an FCV matching kLatest.
|
2021-10-25 16:56:41 +00:00
|
|
|
const arbiter = rst.getArbiter();
|
2024-03-19 01:58:48 +06:00
|
|
|
const arbiterFCV = assert.commandWorked(
|
2025-08-21 10:17:44 -07:00
|
|
|
arbiter.getDB("admin").runCommand({getParameter: 1, featureCompatibilityVersion: 1}),
|
|
|
|
|
);
|
2024-03-19 01:58:48 +06:00
|
|
|
assert.eq(arbiterFCV.featureCompatibilityVersion.version, latestFCV, tojson(arbiterFCV));
|
2021-10-25 16:56:41 +00:00
|
|
|
rst.stopSet();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
runTest(latestFCV);
|
|
|
|
|
runTest(lastLTSFCV);
|
|
|
|
|
if (lastContinuousFCV != lastLTSFCV) {
|
|
|
|
|
runTest(lastContinuousFCV);
|
2025-08-21 10:17:44 -07:00
|
|
|
}
|