diff options
author | Jack Mulrow <jack.mulrow@mongodb.com> | 2020-12-07 15:41:45 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-12-10 01:39:07 +0000 |
commit | e804031ae4ea69c2cfbfcca47202fcc468d826b2 (patch) | |
tree | aae6b34565c11979f738b86b2a4b95e397de3952 /src/mongo/db/keys_collection_manager.cpp | |
parent | 20ab705ce483932ad8e2f1c75c797320a21f73c5 (diff) | |
download | mongo-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.cpp | 16 |
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", |