summaryrefslogtreecommitdiff
path: root/src/mongo/db/commands/feature_compatibility_version.cpp
diff options
context:
space:
mode:
authorAli Mir <ali.mir@mongodb.com>2021-02-01 23:48:29 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-02-05 08:23:01 +0000
commit23d20aefc26f110da7ffee7c9b7ba1c33751b538 (patch)
tree5497278c3ae4c6321b3263827f1d0d0dfbc437f0 /src/mongo/db/commands/feature_compatibility_version.cpp
parent3cacfa01fb7c149893726e0481824ba458250c50 (diff)
downloadmongo-23d20aefc26f110da7ffee7c9b7ba1c33751b538.tar.gz
SERVER-53894 Ensure updateFeatureCompatibilityVersionDocument() is idempotent
Diffstat (limited to 'src/mongo/db/commands/feature_compatibility_version.cpp')
-rw-r--r--src/mongo/db/commands/feature_compatibility_version.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/mongo/db/commands/feature_compatibility_version.cpp b/src/mongo/db/commands/feature_compatibility_version.cpp
index 2118149fd5f..4f89b96e307 100644
--- a/src/mongo/db/commands/feature_compatibility_version.cpp
+++ b/src/mongo/db/commands/feature_compatibility_version.cpp
@@ -259,8 +259,13 @@ void FeatureCompatibilityVersion::updateFeatureCompatibilityVersionDocument(
OperationContext* opCtx,
ServerGlobalParams::FeatureCompatibility::Version fromVersion,
ServerGlobalParams::FeatureCompatibility::Version newVersion,
- bool isFromConfigServer) {
- auto transitioningVersion = fromVersion == newVersion
+ bool isFromConfigServer,
+ bool setTargetVersion) {
+
+ // Only transition to fully upgraded or downgraded states when we
+ // have completed all required upgrade/downgrade behavior.
+ auto transitioningVersion = setTargetVersion &&
+ serverGlobalParams.featureCompatibility.isUpgradingOrDowngrading(fromVersion)
? fromVersion
: fcvTransitions.getTransitionalVersion(fromVersion, newVersion, isFromConfigServer);
FeatureCompatibilityVersionDocument fcvDoc =