diff options
author | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2019-01-02 12:04:53 -0500 |
---|---|---|
committer | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2019-01-14 11:40:48 -0500 |
commit | 0cb50f1023c394ba3e51e70a5daa2aea417cea5d (patch) | |
tree | 8fe720bce5abe4bebaf2d9f48b35ad0059260a84 /src/mongo/util/time_support.cpp | |
parent | 9173f799dd56a4e4813e163e927965787db951b9 (diff) | |
download | mongo-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.cpp | 22 |
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; |