summaryrefslogtreecommitdiff
path: root/jstests
diff options
context:
space:
mode:
authorPierlauro Sciarelli <pierlauro.sciarelli@mongodb.com>2022-08-05 12:38:05 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-08-05 13:02:31 +0000
commit0fe254641cd91bf7087d77440028432219029ab6 (patch)
tree7212d960bfaed0016cf0f5f0f8d7c63e71989015 /jstests
parentf0472aaf726ddcb0f0271b86aaf194b09374f492 (diff)
downloadmongo-0fe254641cd91bf7087d77440028432219029ab6.tar.gz
SERVER-68511 MovePrimary update of config.databases entry must use dotted fields notation (backport v5.0)
Diffstat (limited to 'jstests')
-rw-r--r--jstests/multiVersion/genericSetFCVUsage/move_primary_setFCV.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/jstests/multiVersion/genericSetFCVUsage/move_primary_setFCV.js b/jstests/multiVersion/genericSetFCVUsage/move_primary_setFCV.js
new file mode 100644
index 00000000000..c167603a0b3
--- /dev/null
+++ b/jstests/multiVersion/genericSetFCVUsage/move_primary_setFCV.js
@@ -0,0 +1,64 @@
+
+/**
+ * Test that `movePrimary` works for databases created under a different FCV
+ */
+(function() {
+
+"use strict";
+
+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);
+
+function testMovePrimary(db) {
+ const dbName = db.getName();
+ 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);
+}
+
+// Latest FCV
+assert.commandWorked(mongos.adminCommand({setFeatureCompatibilityVersion: latestFCV}));
+
+// 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: lastLTSFCV}));
+
+// Make sure movePrimary works for `createdBeforeDowngrading`
+testMovePrimary(createdBeforeDowngradingDB);
+
+// Create database `createdBeforeUpgrading` under downgraded FCV
+assert.commandWorked(mongos.adminCommand({setFeatureCompatibilityVersion: latestFCV}));
+assert.commandWorked(
+ mongos.adminCommand({enableSharding: kBeforeUpgradingDbName, primaryShard: shard0}));
+assert.commandWorked(createdBeforeUpgradingDB.coll.insert({_id: 'foo'}));
+
+// Upgrade FCV
+assert.commandWorked(mongos.adminCommand({setFeatureCompatibilityVersion: latestFCV}));
+
+// 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();
+})();