summaryrefslogtreecommitdiff
path: root/src/mongo/db/concurrency/write_conflict_exception.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/concurrency/write_conflict_exception.cpp')
-rw-r--r--src/mongo/db/concurrency/write_conflict_exception.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/mongo/db/concurrency/write_conflict_exception.cpp b/src/mongo/db/concurrency/write_conflict_exception.cpp
index d5d40dbc4da..f57ed9282bc 100644
--- a/src/mongo/db/concurrency/write_conflict_exception.cpp
+++ b/src/mongo/db/concurrency/write_conflict_exception.cpp
@@ -27,13 +27,18 @@
* it in the license file.
*/
-#include "mongo/db/concurrency/write_conflict_exception.h"
+#define MONGO_LOGV2_DEFAULT_COMPONENT ::mongo::logv2::LogComponent::kWrite
-#include "mongo/base/error_codes.h"
+#include "mongo/db/concurrency/write_conflict_exception.h"
+#include "mongo/util/log_and_backoff.h"
#include "mongo/util/stacktrace.h"
namespace mongo {
+MONGO_FAIL_POINT_DEFINE(skipWriteConflictRetries);
+
+AtomicWord<bool> WriteConflictException::trace(false);
+
WriteConflictException::WriteConflictException()
: DBException(Status(ErrorCodes::WriteConflict,
"WriteConflict error: this operation conflicted with another operation. "
@@ -43,4 +48,21 @@ WriteConflictException::WriteConflictException()
}
}
+WriteConflictException::WriteConflictException(StringData context) : WriteConflictException() {
+ // Avoid unnecessary update to embedded Status within DBException.
+ if (context.empty()) {
+ return;
+ }
+ addContext(context);
+}
+
+void WriteConflictException::logAndBackoff(int attempt, StringData operation, StringData ns) {
+ mongo::logAndBackoff(4640401,
+ ::mongo::logv2::LogComponent::kWrite,
+ logv2::LogSeverity::Debug(1),
+ static_cast<size_t>(attempt),
+ "Caught WriteConflictException",
+ "operation"_attr = operation,
+ logAttrs(NamespaceString(ns)));
+}
} // namespace mongo