summaryrefslogtreecommitdiff
path: root/src/mongo/db/prepare_conflict_tracker.cpp
diff options
context:
space:
mode:
authorHaley Connelly <haley.connelly@10gen.com>2019-09-16 15:03:20 +0000
committerevergreen <evergreen@mongodb.com>2019-09-16 15:03:20 +0000
commit911acee4d9f06ee33416b80bf4e65fa966fdd31a (patch)
treead8ec6d570a1bb793a385dadfba21afbdce8717e /src/mongo/db/prepare_conflict_tracker.cpp
parent81d2b80554331f1ca428138823d27cbf2a293c52 (diff)
downloadmongo-911acee4d9f06ee33416b80bf4e65fa966fdd31a.tar.gz
SERVER-37756 add logging for the amount of time spent blocked on a prepare conflict
Diffstat (limited to 'src/mongo/db/prepare_conflict_tracker.cpp')
-rw-r--r--src/mongo/db/prepare_conflict_tracker.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/mongo/db/prepare_conflict_tracker.cpp b/src/mongo/db/prepare_conflict_tracker.cpp
index 25120459408..1ec1bb9c89a 100644
--- a/src/mongo/db/prepare_conflict_tracker.cpp
+++ b/src/mongo/db/prepare_conflict_tracker.cpp
@@ -40,13 +40,28 @@ bool PrepareConflictTracker::isWaitingOnPrepareConflict() const {
}
void PrepareConflictTracker::beginPrepareConflict() {
+ invariant(_prepareConflictStartTime == 0);
+ _prepareConflictStartTime = curTimeMicros64();
+
// Implies that the current read operation is blocked on a prepared transaction.
_waitOnPrepareConflict.store(true);
}
void PrepareConflictTracker::endPrepareConflict() {
+ // This function is called regardless whether there was a prepare conflict.
+ if (_prepareConflictStartTime > 0) {
+ invariant(_prepareConflictStartTime <= static_cast<long long>(curTimeMicros64()));
+ _prepareConflictDuration +=
+ Microseconds{static_cast<long long>(curTimeMicros64()) - _prepareConflictStartTime};
+ }
+ _prepareConflictStartTime = 0;
+
// Implies that the current read operation is not blocked on a prepared transaction.
_waitOnPrepareConflict.store(false);
}
+Microseconds PrepareConflictTracker::getPrepareConflictDuration() {
+ return _prepareConflictDuration;
+}
+
} // namespace mongo