diff options
author | Lingzhi Deng <lingzhi.deng@mongodb.com> | 2020-07-06 14:36:42 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-07-15 20:07:53 +0000 |
commit | 5446d926d8d21f3dd583b26980308519a2b67708 (patch) | |
tree | 9c9c05dcc1b669a587db47e57ba9aa47d84b0c10 /jstests | |
parent | c26b0c167e8db6506e547e1daaa51f09a6e6c1bd (diff) | |
download | mongo-5446d926d8d21f3dd583b26980308519a2b67708.tar.gz |
SERVER-49269: Add 'previousVersion' field to FCV document when in downgrading states
Diffstat (limited to 'jstests')
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)); |