diff options
author | Haley Connelly <haley.connelly@10gen.com> | 2019-09-16 15:03:20 +0000 |
---|---|---|
committer | evergreen <evergreen@mongodb.com> | 2019-09-16 15:03:20 +0000 |
commit | 911acee4d9f06ee33416b80bf4e65fa966fdd31a (patch) | |
tree | ad8ec6d570a1bb793a385dadfba21afbdce8717e /src/mongo/db/prepare_conflict_tracker.cpp | |
parent | 81d2b80554331f1ca428138823d27cbf2a293c52 (diff) | |
download | mongo-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.cpp | 15 |
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 |