summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_session_cache.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_session_cache.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_session_cache.cpp
index eda476c4d8f..6f27a7bb6d9 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_session_cache.cpp
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_session_cache.cpp
@@ -193,19 +193,20 @@ void WiredTigerSessionCache::waitUntilDurable(bool forceCheckpoint) {
ON_BLOCK_EXIT([this, session] { releaseSession(session); });
WT_SESSION* s = session->getSession();
+ // This gets the token (OpTime) from the last write, before flushing (either the journal, or a
+ // checkpoint), and then reports that token (OpTime) as a durable write.
+ stdx::unique_lock<stdx::mutex> jlk(_journalListenerMutex);
+ JournalListener::Token token = _journalListener->getToken();
+
// Use the journal when available, or a checkpoint otherwise.
if (_engine->isDurable()) {
- {
- stdx::unique_lock<stdx::mutex> lk(_journalListenerMutex);
- JournalListener::Token token = _journalListener->getToken();
- invariantWTOK(s->log_flush(s, "sync=on"));
- _journalListener->onDurable(token);
- }
+ invariantWTOK(s->log_flush(s, "sync=on"));
LOG(4) << "flushed journal";
} else {
invariantWTOK(s->checkpoint(s, NULL));
LOG(4) << "created checkpoint";
}
+ _journalListener->onDurable(token);
}
void WiredTigerSessionCache::closeAll() {