summaryrefslogtreecommitdiff
path: root/src/mongo/util/time_support.cpp
diff options
context:
space:
mode:
authorKaloian Manassiev <kaloian.manassiev@mongodb.com>2019-01-02 12:04:53 -0500
committerKaloian Manassiev <kaloian.manassiev@mongodb.com>2019-01-14 11:40:48 -0500
commit0cb50f1023c394ba3e51e70a5daa2aea417cea5d (patch)
tree8fe720bce5abe4bebaf2d9f48b35ad0059260a84 /src/mongo/util/time_support.cpp
parent9173f799dd56a4e4813e163e927965787db951b9 (diff)
downloadmongo-0cb50f1023c394ba3e51e70a5daa2aea417cea5d.tar.gz
SERVER-37880 Make time_support's Backoff class non-blocking
Diffstat (limited to 'src/mongo/util/time_support.cpp')
-rw-r--r--src/mongo/util/time_support.cpp22
1 files changed, 8 insertions, 14 deletions
diff --git a/src/mongo/util/time_support.cpp b/src/mongo/util/time_support.cpp
index b396d0d53c3..91830f4db05 100644
--- a/src/mongo/util/time_support.cpp
+++ b/src/mongo/util/time_support.cpp
@@ -756,14 +756,15 @@ void sleepmicros(long long s) {
stdx::this_thread::sleep_for(Microseconds(s).toSystemDuration());
}
-void Backoff::nextSleepMillis() {
+Milliseconds Backoff::nextSleep() {
// Get the current time
unsigned long long currTimeMillis = curTimeMillis64();
int lastSleepMillis = _lastSleepMillis;
- if (_lastErrorTimeMillis == 0 || _lastErrorTimeMillis > currTimeMillis /* VM bugs exist */)
+ if (!_lastErrorTimeMillis || _lastErrorTimeMillis > currTimeMillis /* VM bugs exist */)
_lastErrorTimeMillis = currTimeMillis;
+
unsigned long long lastErrorTimeMillis = _lastErrorTimeMillis;
_lastErrorTimeMillis = currTimeMillis;
@@ -771,28 +772,21 @@ void Backoff::nextSleepMillis() {
// Store the last slept time
_lastSleepMillis = lastSleepMillis;
- sleepmillis(lastSleepMillis);
+ return Milliseconds(lastSleepMillis);
}
-int Backoff::getNextSleepMillis(int lastSleepMillis,
+int Backoff::getNextSleepMillis(long long lastSleepMillis,
unsigned long long currTimeMillis,
unsigned long long lastErrorTimeMillis) const {
// Backoff logic
// Get the time since the last error
- unsigned long long timeSinceLastErrorMillis = currTimeMillis - lastErrorTimeMillis;
-
- // Makes the cast below safe
- verify(_resetAfterMillis >= 0);
+ const long long timeSinceLastErrorMillis = currTimeMillis - lastErrorTimeMillis;
- // If we haven't seen another error recently (3x the max wait time), reset our
- // wait counter.
- if (timeSinceLastErrorMillis > (unsigned)(_resetAfterMillis))
+ // If we haven't seen another error recently (3x the max wait time), reset our wait counter
+ if (timeSinceLastErrorMillis > _resetAfterMillis)
lastSleepMillis = 0;
- // Makes the test below sane
- verify(_maxSleepMillis > 0);
-
// Wait a power of two millis
if (lastSleepMillis == 0)
lastSleepMillis = 1;