Files
mongo/jstests/multiVersion/genericSetFCVUsage/move_primary_setFCV.js
Matt Broadstone 771dabd098 SERVER-81339 Convert ReplSetTest and ShardingTest to modules (#26332)
GitOrigin-RevId: 744aa110a53786b23c62ff53f87a1418b5991e8d
2024-08-20 22:00:49 +00:00

85 lines
3.9 KiB
JavaScript

/**
* Test that `movePrimary` works for databases created under a different FCV
*/
import {ShardingTest} from "jstests/libs/shardingtest.js";
let st = new ShardingTest({shards: 2, mongos: 1, rs: {nodes: 1}});
const mongos = st.s;
const kBeforeDowngradingDbName = 'createdBeforeDowngrading';
const kBeforeUpgradingDbName = 'createdBeforeUpgrading';
const shard0 = st.shard0.shardName;
const shard1 = st.shard1.shardName;
const createdBeforeDowngradingDB = mongos.getDB(kBeforeDowngradingDbName);
const createdBeforeUpgradingDB = mongos.getDB(kBeforeUpgradingDbName);
const fcvValues = [lastLTSFCV, lastContinuousFCV];
function testMovePrimary(db) {
const dbName = db.getName();
// The following pipeline update modifies the config.databases entry to simulate its database
// version field order as having come from running {setFeatureCompatibility: "5.0"} as part of
// upgrading from MongoDB 4.4. See SERVER-68511 for more details of the original issue.
mongos.getDB('config').databases.update({_id: dbName}, [{
$replaceWith: {
$mergeObjects: [
"$$ROOT",
{
version: {
uuid: "$version.uuid",
lastMod: "$version.lastMod",
timestamp: "$version.timestamp"
}
}
]
}
}]);
const currentPrimary = mongos.getDB('config').databases.findOne({_id: dbName}).primary;
const newPrimary = currentPrimary == shard0 ? shard1 : shard0;
assert.eq(db.coll.countDocuments({}), 1);
assert.commandWorked(mongos.adminCommand({movePrimary: dbName, to: newPrimary}));
assert.eq(newPrimary, mongos.getDB('config').databases.findOne({_id: dbName}).primary);
assert.eq(db.coll.countDocuments({}), 1);
}
for (var i = 0; i < fcvValues.length; i++) {
// Latest FCV
assert.commandWorked(
mongos.adminCommand({setFeatureCompatibilityVersion: latestFCV, confirm: true}));
// Create database `createdBeforeDowngrading` under latest FCV
assert.commandWorked(
mongos.adminCommand({enableSharding: kBeforeDowngradingDbName, primaryShard: shard0}));
assert.commandWorked(createdBeforeDowngradingDB.coll.insert({_id: 'foo'}));
// Downgrade FCV
assert.commandWorked(
mongos.adminCommand({setFeatureCompatibilityVersion: fcvValues[i], confirm: true}));
// Make sure movePrimary works for `createdBeforeDowngrading`
testMovePrimary(createdBeforeDowngradingDB);
// Create database `createdBeforeUpgrading` under downgraded FCV
assert.commandWorked(
mongos.adminCommand({setFeatureCompatibilityVersion: latestFCV, confirm: true}));
assert.commandWorked(
mongos.adminCommand({enableSharding: kBeforeUpgradingDbName, primaryShard: shard0}));
assert.commandWorked(createdBeforeUpgradingDB.coll.insert({_id: 'foo'}));
// Upgrade FCV
assert.commandWorked(
mongos.adminCommand({setFeatureCompatibilityVersion: latestFCV, confirm: true}));
// Make sure movePrimary works (again) for `createdBeforeDowngrading`
testMovePrimary(createdBeforeDowngradingDB);
// Make sure movePrimary works for `createdBeforeUpgrading`
testMovePrimary(createdBeforeUpgradingDB);
// Drop databases for next round
assert.commandWorked(createdBeforeDowngradingDB.dropDatabase());
assert.commandWorked(createdBeforeUpgradingDB.dropDatabase());
}
st.stop();