81 lines
3.3 KiB
JavaScript
81 lines
3.3 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 (let 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({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();
|