summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenrik Edin <henrik.edin@mongodb.com>2021-04-27 16:17:31 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-04-28 20:53:09 +0000
commitbac820d6c23ffcf8f21fbb2ddf3338bff3dccc43 (patch)
treedf0b4643e6196310078530ef6eea9005192cf8ce
parent9471eb1f6b413396295b390b7892c50650ff3623 (diff)
downloadmongo-bac820d6c23ffcf8f21fbb2ddf3338bff3dccc43.tar.gz
SERVER-56400 Fix race in WiredTigerKVEngine::haveDropsQueued over _previousCheckedDropsQueued.
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp6
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h2
2 files changed, 4 insertions, 4 deletions
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp
index 8792ae37f9c..8371d6e312a 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp
@@ -343,7 +343,7 @@ WiredTigerKVEngine::WiredTigerKVEngine(const std::string& canonicalName,
}
}
- _previousCheckedDropsQueued = _clockSource->now();
+ _previousCheckedDropsQueued.store(_clockSource->now().toMillisSinceEpoch());
std::stringstream ss;
ss << "create,";
@@ -1726,7 +1726,7 @@ std::list<WiredTigerCachedCursor> WiredTigerKVEngine::filterCursorsWithQueuedDro
bool WiredTigerKVEngine::haveDropsQueued() const {
Date_t now = _clockSource->now();
- Milliseconds delta = now - _previousCheckedDropsQueued;
+ Milliseconds delta = now - Date_t::fromMillisSinceEpoch(_previousCheckedDropsQueued.load());
if (!_readOnly && _sizeStorerSyncTracker.intervalHasElapsed()) {
_sizeStorerSyncTracker.resetLastTime();
@@ -1737,7 +1737,7 @@ bool WiredTigerKVEngine::haveDropsQueued() const {
if (delta < Milliseconds(1000))
return false;
- _previousCheckedDropsQueued = now;
+ _previousCheckedDropsQueued.store(now.toMillisSinceEpoch());
// Don't wait for the mutex: if we can't get it, report that no drops are queued.
stdx::unique_lock<Latch> lk(_identToDropMutex, stdx::defer_lock);
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h
index 9b43d48ee83..cede3f05788 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h
@@ -464,7 +464,7 @@ private:
mutable Mutex _identToDropMutex = MONGO_MAKE_LATCH("WiredTigerKVEngine::_identToDropMutex");
std::list<IdentToDrop> _identToDrop;
- mutable Date_t _previousCheckedDropsQueued;
+ mutable AtomicWord<long long> _previousCheckedDropsQueued;
std::unique_ptr<WiredTigerSession> _backupSession;
WiredTigerBackup _wtBackup;