diff options
author | Jack Mulrow <jack.mulrow@mongodb.com> | 2022-05-27 20:46:36 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-05-28 01:54:02 +0000 |
commit | 233249600339aed492927b8d252f856366a396dc (patch) | |
tree | 60e26edfaac9df63acbe01f4574798b3030893c5 | |
parent | cd8d0b4122f95ae4bb020c7391dffa9297938914 (diff) | |
download | mongo-233249600339aed492927b8d252f856366a396dc.tar.gz |
SERVER-66849 Error labels should account for cluster abort and commit commands
(cherry picked from commit 6670518c902d4cef237bb3539da85a75eaa69fe7)
-rw-r--r-- | src/mongo/db/error_labels.cpp | 11 | ||||
-rw-r--r-- | src/mongo/db/error_labels_test.cpp | 25 |
2 files changed, 33 insertions, 3 deletions
diff --git a/src/mongo/db/error_labels.cpp b/src/mongo/db/error_labels.cpp index 50c904ec07e..0e4e2177778 100644 --- a/src/mongo/db/error_labels.cpp +++ b/src/mongo/db/error_labels.cpp @@ -40,7 +40,13 @@ namespace { MONGO_FAIL_POINT_DEFINE(errorLabelBuilderMockShutdown); -} +const StringMap<int> commitOrAbortCommands = {{"abortTransaction", 1}, + {"clusterAbortTransaction", 1}, + {"clusterCommitTransaction", 1}, + {"commitTransaction", 1}, + {"coordinateCommitTransaction", 1}}; + +} // namespace bool ErrorLabelBuilder::isTransientTransactionError() const { // Note that we only apply the TransientTransactionError label if the "autocommit" field is @@ -156,8 +162,7 @@ void ErrorLabelBuilder::build(BSONArrayBuilder& labels) const { } bool ErrorLabelBuilder::_isCommitOrAbort() const { - return _commandName == "commitTransaction" || _commandName == "coordinateCommitTransaction" || - _commandName == "abortTransaction"; + return commitOrAbortCommands.find(_commandName) != commitOrAbortCommands.cend(); } BSONObj getErrorLabels(OperationContext* opCtx, diff --git a/src/mongo/db/error_labels_test.cpp b/src/mongo/db/error_labels_test.cpp index b3776be663b..f88c6d46b01 100644 --- a/src/mongo/db/error_labels_test.cpp +++ b/src/mongo/db/error_labels_test.cpp @@ -391,6 +391,18 @@ TEST_F(ErrorLabelBuilderTest, RetryableWriteErrorsOnCommitAbortHaveRetryableWrit false /* isInternalClient */, false /* isMongos */); ASSERT_TRUE(commitBuilder.isRetryableWriteError()); + ASSERT_FALSE(commitBuilder.isTransientTransactionError()); + + commandName = "clusterCommitTransaction"; + ErrorLabelBuilder clusterCommitBuilder(opCtx(), + sessionInfo, + commandName, + ErrorCodes::NotWritablePrimary, + boost::none, + false /* isInternalClient */, + true /* isMongos */); + ASSERT_TRUE(commitBuilder.isRetryableWriteError()); + ASSERT_FALSE(commitBuilder.isTransientTransactionError()); commandName = "coordinateCommitTransaction"; ErrorLabelBuilder coordinateCommitBuilder(opCtx(), @@ -401,6 +413,7 @@ TEST_F(ErrorLabelBuilderTest, RetryableWriteErrorsOnCommitAbortHaveRetryableWrit false /* isInternalClient */, false /* isMongos */); ASSERT_TRUE(coordinateCommitBuilder.isRetryableWriteError()); + ASSERT_FALSE(commitBuilder.isTransientTransactionError()); commandName = "abortTransaction"; ErrorLabelBuilder abortBuilder(opCtx(), @@ -411,6 +424,18 @@ TEST_F(ErrorLabelBuilderTest, RetryableWriteErrorsOnCommitAbortHaveRetryableWrit false /* isInternalClient */, false /* isMongos */); ASSERT_TRUE(abortBuilder.isRetryableWriteError()); + ASSERT_FALSE(commitBuilder.isTransientTransactionError()); + + commandName = "clusterAbortTransaction"; + ErrorLabelBuilder clusterAbortBuilder(opCtx(), + sessionInfo, + commandName, + ErrorCodes::NotWritablePrimary, + boost::none, + false /* isInternalClient */, + true /* isMongos */); + ASSERT_TRUE(commitBuilder.isRetryableWriteError()); + ASSERT_FALSE(commitBuilder.isTransientTransactionError()); } TEST_F(ErrorLabelBuilderTest, NonResumableChangeStreamError) { |