diff options
Diffstat (limited to 'src/mongo/db/concurrency/write_conflict_exception.cpp')
| -rw-r--r-- | src/mongo/db/concurrency/write_conflict_exception.cpp | 26 |
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 |
