summaryrefslogtreecommitdiff
path: root/jstests/noPassthrough/index_disallowNewDuplicateKeys_downgrade.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/noPassthrough/index_disallowNewDuplicateKeys_downgrade.js')
-rw-r--r--jstests/noPassthrough/index_disallowNewDuplicateKeys_downgrade.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/jstests/noPassthrough/index_disallowNewDuplicateKeys_downgrade.js b/jstests/noPassthrough/index_disallowNewDuplicateKeys_downgrade.js
new file mode 100644
index 00000000000..4c733772788
--- /dev/null
+++ b/jstests/noPassthrough/index_disallowNewDuplicateKeys_downgrade.js
@@ -0,0 +1,66 @@
+/**
+ * Tests that the cluster cannot be downgraded when there are indexes with the
+ * 'disallowNewDuplicateKeys' field present.
+ *
+ * TODO SERVER-63563: Update this test once kLastContinuous is 5.3.
+ * TODO SERVER-63564: Remove this test once kLastLTS is 6.0.
+ *
+ * @tags: [requires_fcv_53]
+ */
+(function() {
+"use strict";
+
+const conn = MongoRunner.runMongod();
+const db = conn.getDB("test");
+
+const collModIndexUniqueEnabled = assert
+ .commandWorked(db.getMongo().adminCommand(
+ {getParameter: 1, featureFlagCollModIndexUnique: 1}))
+ .featureFlagCollModIndexUnique.value;
+
+if (!collModIndexUniqueEnabled) {
+ jsTestLog('Skipping test because the collMod unique index feature flag is disabled.');
+ MongoRunner.stopMongod(conn);
+ return;
+}
+
+const collName = "index_disallowNewDuplicateKeys_downgrade";
+const coll = db.getCollection(collName);
+assert.commandWorked(db.createCollection(coll.getName()));
+
+function checkIndexForDowngrade(withFCV, fixIndex, isCompatible) {
+ assert.commandWorked(coll.createIndex({a: 1}, {disallowNewDuplicateKeys: true}));
+ assert.commandWorked(coll.createIndex({b: 1}, {disallowNewDuplicateKeys: true}));
+
+ if (fixIndex) {
+ // Resolves the incompatibility before the downgrade.
+ assert.commandWorked(coll.dropIndex({a: 1}));
+ assert.commandWorked(db.runCommand(
+ {collMod: collName, index: {keyPattern: {b: 1}, disallowNewDuplicateKeys: false}}));
+ } else if (!isCompatible) {
+ assert.commandFailedWithCode(db.adminCommand({setFeatureCompatibilityVersion: withFCV}),
+ ErrorCodes.CannotDowngrade);
+ assert.commandWorked(coll.dropIndexes("*"));
+ }
+
+ // Downgrades to the version 'withFCV' and reset to 'latestFCV'.
+ assert.commandWorked(db.adminCommand({setFeatureCompatibilityVersion: withFCV}));
+ assert.commandWorked(db.adminCommand({setFeatureCompatibilityVersion: latestFCV}));
+
+ assert.commandWorked(coll.dropIndexes("*"));
+}
+
+// Fails to downgrade to 5.2.
+checkIndexForDowngrade(lastContinuousFCV, false, false);
+
+// Fails to downgrade to 5.0.
+checkIndexForDowngrade(lastLTSFCV, false, false);
+
+// Successfully downgrades to 5.2 after removing the 'disallowNewDuplicateKeys' field.
+checkIndexForDowngrade(lastContinuousFCV, true, true);
+
+// Successfully downgrades to 5.0 after removing the 'disallowNewDuplicateKeys' field.
+checkIndexForDowngrade(lastLTSFCV, true, true);
+
+MongoRunner.stopMongod(conn);
+}()); \ No newline at end of file