summaryrefslogtreecommitdiff
path: root/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp')
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp36
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;
}