summaryrefslogtreecommitdiff
path: root/src/mongo/db/commands
diff options
context:
space:
mode:
authorHuayu Ouyang <huayu.ouyang@mongodb.com>2023-04-05 18:31:04 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2023-04-05 23:47:00 +0000
commite830220d8cb9a07993ad20ebf69e3eb695224096 (patch)
treeebf1a6e44e47402b41943b897f0426a8a5627d06 /src/mongo/db/commands
parent4858d4fdec15b9856d2dc06141022bd4c846560b (diff)
downloadmongo-e830220d8cb9a07993ad20ebf69e3eb695224096.tar.gz
SERVER-75552 Make set_fcv_to_downgrading_fast.js less brittle
Diffstat (limited to 'src/mongo/db/commands')
-rw-r--r--src/mongo/db/commands/set_feature_compatibility_version_command.cpp15
1 files changed, 15 insertions, 0 deletions
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 31a0757368d..d40ce187ba3 100644
--- a/src/mongo/db/commands/set_feature_compatibility_version_command.cpp
+++ b/src/mongo/db/commands/set_feature_compatibility_version_command.cpp
@@ -123,6 +123,9 @@ MONGO_FAIL_POINT_DEFINE(failBeforeUpdatingFcvDoc);
MONGO_FAIL_POINT_DEFINE(failDowngradingDuringIsCleaningServerMetadata);
MONGO_FAIL_POINT_DEFINE(hangBeforeTransitioningToDowngraded);
MONGO_FAIL_POINT_DEFINE(hangDowngradingBeforeIsCleaningServerMetadata);
+MONGO_FAIL_POINT_DEFINE(failAfterReachingTransitioningState);
+MONGO_FAIL_POINT_DEFINE(hangAtSetFCVStart);
+MONGO_FAIL_POINT_DEFINE(failAfterSendingShardsToDowngradingOrUpgrading);
/**
* Ensures that only one instance of setFeatureCompatibilityVersion can run at a given time.
@@ -265,6 +268,8 @@ public:
const DatabaseName&,
const BSONObj& cmdObj,
BSONObjBuilder& result) override {
+ hangAtSetFCVStart.pauseWhileSet(opCtx);
+
// Ensure that this operation will be killed by the RstlKillOpThread during step-up or
// stepdown.
opCtx->setAlwaysInterruptAtStepDownOrUp_UNSAFE();
@@ -439,6 +444,11 @@ public:
"toVersion"_attr = requestedVersion);
}
+ uassert(ErrorCodes::Error(7555200),
+ "Failing upgrade or downgrade due to 'failAfterReachingTransitioningState' "
+ "failpoint set",
+ !failAfterReachingTransitioningState.shouldFail());
+
if (request.getPhase() == SetFCVPhaseEnum::kStart) {
invariant(serverGlobalParams.clusterRole.has(ClusterRole::ShardServer));
@@ -476,6 +486,11 @@ public:
}
}
+ uassert(ErrorCodes::Error(7555202),
+ "Failing downgrade due to "
+ "'failAfterSendingShardsToDowngradingOrUpgrading' failpoint set",
+ !failAfterSendingShardsToDowngradingOrUpgrading.shouldFail());
+
// Any checks and actions that need to be performed before being able to downgrade needs
// to be placed on the _prepareToUpgrade and _prepareToDowngrade functions. After the
// prepare function complete, a node is not allowed to refuse to upgrade/downgrade.