summaryrefslogtreecommitdiff
path: root/jstests
diff options
context:
space:
mode:
authorLingzhi Deng <lingzhi.deng@mongodb.com>2020-07-06 14:36:42 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-07-15 20:07:53 +0000
commit5446d926d8d21f3dd583b26980308519a2b67708 (patch)
tree9c9c05dcc1b669a587db47e57ba9aa47d84b0c10 /jstests
parentc26b0c167e8db6506e547e1daaa51f09a6e6c1bd (diff)
downloadmongo-5446d926d8d21f3dd583b26980308519a2b67708.tar.gz
SERVER-49269: Add 'previousVersion' field to FCV document when in downgrading states
Diffstat (limited to 'jstests')
-rw-r--r--jstests/multiVersion/genericSetFCVUsage/repair_feature_compatibility_version.js7
-rw-r--r--jstests/noPassthrough/feature_compatibility_version.js36
-rw-r--r--jstests/noPassthroughWithMongod/isMaster_feature_compatibility_version.js8
3 files changed, 35 insertions, 16 deletions
diff --git a/jstests/multiVersion/genericSetFCVUsage/repair_feature_compatibility_version.js b/jstests/multiVersion/genericSetFCVUsage/repair_feature_compatibility_version.js
index e9da9ce7735..ec06f436333 100644
--- a/jstests/multiVersion/genericSetFCVUsage/repair_feature_compatibility_version.js
+++ b/jstests/multiVersion/genericSetFCVUsage/repair_feature_compatibility_version.js
@@ -66,9 +66,10 @@ assert.neq(null,
connection,
"mongod was unable to start up with version=" + latest + " and existing data files");
adminDB = connection.getDB("admin");
-assert.eq(adminDB.system.version.findOne({_id: "featureCompatibilityVersion"}).version,
- lastStableFCV);
-assert.eq(adminDB.system.version.findOne({_id: "featureCompatibilityVersion"}).targetVersion, null);
+const fcvDoc = adminDB.system.version.findOne({_id: "featureCompatibilityVersion"});
+assert.eq(fcvDoc.version, lastStableFCV);
+assert.eq(fcvDoc.targetVersion, undefined);
+assert.eq(fcvDoc.previousVersion, undefined);
MongoRunner.stopMongod(connection);
// If the featureCompatibilityVersion document is present, --repair should just return success.
diff --git a/jstests/noPassthrough/feature_compatibility_version.js b/jstests/noPassthrough/feature_compatibility_version.js
index a413ac02542..47f992f3b22 100644
--- a/jstests/noPassthrough/feature_compatibility_version.js
+++ b/jstests/noPassthrough/feature_compatibility_version.js
@@ -23,31 +23,49 @@ assert.commandWorked(
{$set: {version: lastStableFCV, targetVersion: latestFCV}}));
checkFCV(adminDB, lastStableFCV, latestFCV);
-assert.commandWorked(
- adminDB.system.version.update({_id: "featureCompatibilityVersion"},
- {$set: {version: lastStableFCV, targetVersion: lastStableFCV}}));
+assert.commandWorked(adminDB.system.version.update(
+ {_id: "featureCompatibilityVersion"},
+ {$set: {version: lastStableFCV, targetVersion: lastStableFCV, previousVersion: latestFCV}}));
checkFCV(adminDB, lastStableFCV, lastStableFCV);
-assert.commandWorked(
- adminDB.system.version.update({_id: "featureCompatibilityVersion"},
- {$set: {version: latestFCV}, $unset: {targetVersion: true}}));
+// When present, "previousVersion" will always be the latestFCV.
+assert.writeErrorWithCode(adminDB.system.version.update({_id: "featureCompatibilityVersion"},
+ {$set: {previousVersion: lastStableFCV}}),
+ 4926901);
+checkFCV(adminDB, lastStableFCV, lastStableFCV);
+
+// Downgrading FCV must have a 'previousVersion' field.
+assert.writeErrorWithCode(adminDB.system.version.update({_id: "featureCompatibilityVersion"},
+ {$unset: {previousVersion: true}}),
+ 4926902);
+checkFCV(adminDB, lastStableFCV, lastStableFCV);
+
+assert.commandWorked(adminDB.system.version.update(
+ {_id: "featureCompatibilityVersion"},
+ {$set: {version: latestFCV}, $unset: {targetVersion: true, previousVersion: true}}));
checkFCV(adminDB, latestFCV);
// Updating the featureCompatibilityVersion document with an invalid version fails.
assert.writeErrorWithCode(
adminDB.system.version.update({_id: "featureCompatibilityVersion"}, {$set: {version: "3.2"}}),
- ErrorCodes.BadValue);
+ 4926900);
checkFCV(adminDB, latestFCV);
// Updating the featureCompatibilityVersion document with an invalid targetVersion fails.
assert.writeErrorWithCode(adminDB.system.version.update({_id: "featureCompatibilityVersion"},
{$set: {targetVersion: lastStableFCV}}),
- ErrorCodes.BadValue);
+ 4926904);
checkFCV(adminDB, latestFCV);
assert.writeErrorWithCode(adminDB.system.version.update({_id: "featureCompatibilityVersion"},
{$set: {targetVersion: latestFCV}}),
- ErrorCodes.BadValue);
+ 4926904);
+checkFCV(adminDB, latestFCV);
+
+// Setting an unknown field.
+assert.writeErrorWithCode(adminDB.system.version.update({_id: "featureCompatibilityVersion"},
+ {$set: {unknownField: "unknown"}}),
+ 40415);
checkFCV(adminDB, latestFCV);
MongoRunner.stopMongod(conn);
diff --git a/jstests/noPassthroughWithMongod/isMaster_feature_compatibility_version.js b/jstests/noPassthroughWithMongod/isMaster_feature_compatibility_version.js
index 7dcc280c066..9cace458341 100644
--- a/jstests/noPassthroughWithMongod/isMaster_feature_compatibility_version.js
+++ b/jstests/noPassthroughWithMongod/isMaster_feature_compatibility_version.js
@@ -36,10 +36,10 @@ assert.eq(res.minWireVersion, res.maxWireVersion, tojson(res));
// When the featureCompatibilityVersion is downgrading, running isMaster with internalClient
// returns minWireVersion == maxWireVersion.
-assert.commandWorked(
- adminDB.system.version.update({_id: "featureCompatibilityVersion"},
- {$set: {version: lastStableFCV, targetVersion: lastStableFCV}},
- {writeConcern: {w: 1}}));
+assert.commandWorked(adminDB.system.version.update(
+ {_id: "featureCompatibilityVersion"},
+ {$set: {version: lastStableFCV, targetVersion: lastStableFCV, previousVersion: latestFCV}},
+ {writeConcern: {w: 1}}));
res = adminDB.runCommand(isMasterCommand);
assert.commandWorked(res);
assert.eq(res.minWireVersion, res.maxWireVersion, tojson(res));