From c6d2220f9bb1daceb31f097c06c39cd2e917fb9c Mon Sep 17 00:00:00 2001 From: Jordi Serra Torrens Date: Tue, 6 Jul 2021 18:24:06 +0000 Subject: [PATCH] repro bf-21787 --- jstests/sharding/bf-21787 | 31 +++++++++++++++++++ ..._feature_compatibility_version_command.cpp | 3 ++ 2 files changed, 34 insertions(+) create mode 100644 jstests/sharding/bf-21787 diff --git a/jstests/sharding/bf-21787 b/jstests/sharding/bf-21787 new file mode 100644 index 0000000000..15f0eaefa8 --- /dev/null +++ b/jstests/sharding/bf-21787 @@ -0,0 +1,31 @@ +(function() { +'use strict'; + +load("jstests/libs/fail_point_util.js"); +load('jstests/libs/parallel_shell_helpers.js'); + +let st = new ShardingTest({config: 3, mongos: 1, shards: 1}); + +let failpoint = configureFailPoint(st.configRS.getPrimary(), 'hangBeforeUpdateFcvDoc'); + +jsTest.log("Run setFCV that will wait on the hangBeforeUpdateFcvDoc failpoint") +let awaitShell = startParallelShell(funWithArgs(function(foo) { + assert.commandWorked(db.adminCommand({setFeatureCompatibilityVersion: lastLTSFCV})); +}, "foo"), st.s.port); + +failpoint.wait(); + +jsTest.log("Stepdown the configRS primary") +assert.commandWorked(st.configRS.getPrimary().adminCommand({replSetStepDown: 60, force: 1})); +st.rs0.awaitNodesAgreeOnPrimary(); + +jsTest.log("Launch FCV on the new primary") +assert.commandWorked(st.s.adminCommand({setFeatureCompatibilityVersion: lastLTSFCV})); +st.configRS.awaitReplication(); + +jsTest.log("Unset the failpoint on the former primary so it continues running setFCV") +failpoint.off(); +awaitShell(); + +st.stop(); +})(); diff --git a/src/mongo/db/commands/set_feature_compatibility_version_command.cpp b/src/mongo/db/commands/set_feature_compatibility_version_command.cpp index 70d01d9c44..4a74fc7ec2 100644 --- a/src/mongo/db/commands/set_feature_compatibility_version_command.cpp +++ b/src/mongo/db/commands/set_feature_compatibility_version_command.cpp @@ -91,6 +91,7 @@ MONGO_FAIL_POINT_DEFINE(hangWhileUpgrading); MONGO_FAIL_POINT_DEFINE(hangAfterStartingFCVTransition); MONGO_FAIL_POINT_DEFINE(failDowngrading); MONGO_FAIL_POINT_DEFINE(hangWhileDowngrading); +MONGO_FAIL_POINT_DEFINE(hangBeforeUpdateFcvDoc); /** * Ensures that only one instance of setFeatureCompatibilityVersion can run at a given time. @@ -487,6 +488,8 @@ public: // downgraded requestedVersion. const auto fcvChangeRegion(FeatureCompatibilityVersion::enterFCVChangeRegion(opCtx)); + hangBeforeUpdateFcvDoc.pauseWhileSet(); + FeatureCompatibilityVersion::updateFeatureCompatibilityVersionDocument( opCtx, serverGlobalParams.featureCompatibility.getVersion(), -- 2.17.1