diff options
Diffstat (limited to 'src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp')
-rw-r--r-- | src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp index b3eb7e9a9f7..04bdd8d3636 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp @@ -1820,23 +1820,31 @@ void WiredTigerRecordStore::cappedTruncateAfter(OperationContext* opCtx, Timestamp truncTs(lastKeptId.repr()); LOG(logLevel) << "Rewinding oplog visibility point to " << truncTs << " after truncation."; + if (!serverGlobalParams.enableMajorityReadConcern) { + // If majority read concern is disabled, we must set the oldest timestamp along with the + // commit timestamp. Otherwise, the commit timestamp might be set behind the oldest + // timestamp. + const bool force = true; + _kvEngine->setOldestTimestamp(truncTs, force); + } else { + char commitTSConfigString["commit_timestamp="_sd.size() + + (8 * 2) /* 8 hexadecimal characters */ + + 1 /* trailing null */]; + auto size = std::snprintf(commitTSConfigString, + sizeof(commitTSConfigString), + "commit_timestamp=%llx", + truncTs.asULL()); + if (size < 0) { + int e = errno; + error() << "error snprintf " << errnoWithDescription(e); + fassertFailedNoTrace(40662); + } - char commitTSConfigString["commit_timestamp="_sd.size() + - (8 * 2) /* 8 hexadecimal characters */ + 1 /* trailing null */]; - auto size = std::snprintf(commitTSConfigString, - sizeof(commitTSConfigString), - "commit_timestamp=%llx", - truncTs.asULL()); - if (size < 0) { - int e = errno; - error() << "error snprintf " << errnoWithDescription(e); - fassertFailedNoTrace(40662); + invariant(static_cast<std::size_t>(size) < sizeof(commitTSConfigString)); + auto conn = WiredTigerRecoveryUnit::get(opCtx)->getSessionCache()->conn(); + invariantWTOK(conn->set_timestamp(conn, commitTSConfigString)); } - invariant(static_cast<std::size_t>(size) < sizeof(commitTSConfigString)); - auto conn = WiredTigerRecoveryUnit::get(opCtx)->getSessionCache()->conn(); - invariantWTOK(conn->set_timestamp(conn, commitTSConfigString)); - _kvEngine->getOplogManager()->setOplogReadTimestamp(truncTs); LOG(1) << "truncation new read timestamp: " << truncTs; } |