summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaley Connelly <haley.connelly@10gen.com>2019-09-30 21:59:39 +0000
committerevergreen <evergreen@mongodb.com>2019-09-30 21:59:39 +0000
commitae95a4f31b75590635db3eb80ec6bf19cccffebf (patch)
treeebbd6ecfa37bb14da12da361b90f1f85d004622c
parentf14c26dfc3975f0c98af26573ab91b5d9c09ee71 (diff)
downloadmongo-ae95a4f31b75590635db3eb80ec6bf19cccffebf.tar.gz
SERVER-43696 Ensure _prepareConflictStartTime, _prepareConflictDuration and curTimeMicros64() have consistent types in PrepareConflictTracker
-rw-r--r--src/mongo/db/curop.cpp4
-rw-r--r--src/mongo/db/curop.h2
-rw-r--r--src/mongo/db/prepare_conflict_tracker.cpp11
-rw-r--r--src/mongo/db/prepare_conflict_tracker.h6
4 files changed, 13 insertions, 10 deletions
diff --git a/src/mongo/db/curop.cpp b/src/mongo/db/curop.cpp
index cf08c38548d..fd325678ae7 100644
--- a/src/mongo/db/curop.cpp
+++ b/src/mongo/db/curop.cpp
@@ -456,8 +456,8 @@ bool CurOp::completeAndLogOperation(OperationContext* opCtx,
}
// Gets the time spent blocked on prepare conflicts.
- _debug.prepareConflictDurationMicros = durationCount<Microseconds>(
- PrepareConflictTracker::get(opCtx).getPrepareConflictDuration());
+ _debug.prepareConflictDurationMicros =
+ PrepareConflictTracker::get(opCtx).getPrepareConflictDuration();
log(component) << _debug.report(opCtx, (lockerInfo ? &lockerInfo->stats : nullptr));
}
diff --git a/src/mongo/db/curop.h b/src/mongo/db/curop.h
index 7cb2395df5f..b262898e7e7 100644
--- a/src/mongo/db/curop.h
+++ b/src/mongo/db/curop.h
@@ -227,7 +227,7 @@ public:
int nShards{-1};
// Stores the duration of time spent blocked on prepare conflicts.
- long long prepareConflictDurationMicros{0};
+ unsigned long long prepareConflictDurationMicros{0};
// Stores additive metrics.
AdditiveMetrics additiveMetrics;
diff --git a/src/mongo/db/prepare_conflict_tracker.cpp b/src/mongo/db/prepare_conflict_tracker.cpp
index 1ec1bb9c89a..1a52dbf728f 100644
--- a/src/mongo/db/prepare_conflict_tracker.cpp
+++ b/src/mongo/db/prepare_conflict_tracker.cpp
@@ -50,9 +50,12 @@ void PrepareConflictTracker::beginPrepareConflict() {
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};
+ auto curTimeMicros = curTimeMicros64();
+ invariant(_prepareConflictStartTime <= curTimeMicros,
+ str::stream() << "Prepare conflict start time (" << _prepareConflictStartTime
+ << ") is somehow greater than current time (" << curTimeMicros
+ << ")");
+ _prepareConflictDuration += curTimeMicros - _prepareConflictStartTime;
}
_prepareConflictStartTime = 0;
@@ -60,7 +63,7 @@ void PrepareConflictTracker::endPrepareConflict() {
_waitOnPrepareConflict.store(false);
}
-Microseconds PrepareConflictTracker::getPrepareConflictDuration() {
+unsigned long long PrepareConflictTracker::getPrepareConflictDuration() {
return _prepareConflictDuration;
}
diff --git a/src/mongo/db/prepare_conflict_tracker.h b/src/mongo/db/prepare_conflict_tracker.h
index e488af59fe0..7b2298f239c 100644
--- a/src/mongo/db/prepare_conflict_tracker.h
+++ b/src/mongo/db/prepare_conflict_tracker.h
@@ -68,15 +68,15 @@ public:
/**
* Returns the total duration of time spent blocked on prepare conflicts.
*/
- Microseconds getPrepareConflictDuration();
+ unsigned long long getPrepareConflictDuration();
private:
/**
* Set to true when a read operation is currently blocked on a prepare conflict.
*/
AtomicWord<bool> _waitOnPrepareConflict{false};
- long long _prepareConflictStartTime{0};
- Microseconds _prepareConflictDuration{0};
+ unsigned long long _prepareConflictStartTime{0};
+ unsigned long long _prepareConflictDuration{0};
};
} // namespace mongo