summaryrefslogtreecommitdiff
path: root/src/mongo/db/keys_collection_manager.cpp
diff options
context:
space:
mode:
authorJack Mulrow <jack.mulrow@mongodb.com>2020-12-07 15:41:45 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-12-10 01:39:07 +0000
commite804031ae4ea69c2cfbfcca47202fcc468d826b2 (patch)
treeaae6b34565c11979f738b86b2a4b95e397de3952 /src/mongo/db/keys_collection_manager.cpp
parent20ab705ce483932ad8e2f1c75c797320a21f73c5 (diff)
downloadmongo-e804031ae4ea69c2cfbfcca47202fcc468d826b2.tar.gz
SERVER-52654 HMAC keys monitoring thread should never sleep longer than 20 days
Diffstat (limited to 'src/mongo/db/keys_collection_manager.cpp')
-rw-r--r--src/mongo/db/keys_collection_manager.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/mongo/db/keys_collection_manager.cpp b/src/mongo/db/keys_collection_manager.cpp
index 86a95a1a864..45d81b2aa96 100644
--- a/src/mongo/db/keys_collection_manager.cpp
+++ b/src/mongo/db/keys_collection_manager.cpp
@@ -55,7 +55,11 @@ namespace {
Milliseconds kDefaultRefreshWaitTime(30 * 1000);
Milliseconds kRefreshIntervalIfErrored(200);
-Milliseconds kMaxRefreshWaitTime(10 * 60 * 1000);
+Milliseconds kMaxRefreshWaitTimeIfErrored(10 * 60 * 1000);
+// Never wait more than the number of milliseconds in 20 days to avoid sleeping for a number greater
+// than can fit in a signed 32 bit integer.
+// 20 days = 1000 * 60 * 60 * 24 * 20 = 1,728,000,000 vs signed integer max of 2,147,483,648.
+Milliseconds kMaxRefreshWaitTimeOnSuccess(Days(20));
// Prevents the refresher thread from waiting longer than the given number of milliseconds, even on
// a successful refresh.
@@ -79,11 +83,7 @@ Milliseconds howMuchSleepNeedFor(const LogicalTime& currentTime,
Milliseconds millisBeforeExpire = Milliseconds(expiredSecs) - Milliseconds(currentSecs);
- if (interval <= millisBeforeExpire) {
- return interval;
- }
-
- return millisBeforeExpire;
+ return std::min({millisBeforeExpire, interval, kMaxRefreshWaitTimeOnSuccess});
}
} // namespace keys_collection_manager_util
@@ -261,8 +261,8 @@ void KeysCollectionManager::PeriodicRunner::_doPeriodicRefresh(ServiceContext* s
} else {
errorCount += 1;
nextWakeup = Milliseconds(kRefreshIntervalIfErrored.count() * errorCount);
- if (nextWakeup > kMaxRefreshWaitTime) {
- nextWakeup = kMaxRefreshWaitTime;
+ if (nextWakeup > kMaxRefreshWaitTimeIfErrored) {
+ nextWakeup = kMaxRefreshWaitTimeIfErrored;
}
LOGV2(4939300,
"Failed to refresh key cache",