35 #include "mongo/base/string_data.h" 36 #include "mongo/db/curop.h" 37 #include "mongo/util/assert_util.h" 56 static void logAndBackoff(
int attempt, StringData operation, StringData
ns);
81 invariant(opCtx->lockState());
82 invariant(opCtx->recoveryUnit());
84 if (opCtx->lockState()->inAWriteUnitOfWork()) {
93 ++CurOp::get(opCtx)->debug().writeConflicts;
96 opCtx->recoveryUnit()->abandonSnapshot();
Collection *const const NamespaceString & ns
Definition: collection_info_cache_impl.cpp:53
auto writeConflictRetry(OperationContext *opCtx, StringData opStr, StringData ns, F &&f)
Runs the argument function f as many times as needed for f to complete or throw an exception other th...
Definition: write_conflict_exception.h:79
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
static void logAndBackoff(int attempt, StringData operation, StringData ns)
Will log a message if sensible and will do an exponential backoff to make sure we don't hammer the sa...
Definition: write_conflict_exception.cpp:49
WriteConflictException()
Definition: write_conflict_exception.cpp:42
This is thrown if during a write, two or more operations conflict with each other.
Definition: write_conflict_exception.h:46
static AtomicBool trace
If true, will call printStackTrace on every WriteConflictException created.
Definition: write_conflict_exception.h:62
void defineOnlyInFinalSubclassToPreventSlicing() final
Definition: write_conflict_exception.h:65
Collection *const OperationContext *const opCtx
Definition: collection_impl.cpp:80