summaryrefslogtreecommitdiff
path: root/src/mongo/db/rs_local_client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/rs_local_client.cpp')
-rw-r--r--src/mongo/db/rs_local_client.cpp25
1 files changed, 6 insertions, 19 deletions
diff --git a/src/mongo/db/rs_local_client.cpp b/src/mongo/db/rs_local_client.cpp
index ce750402387..65cf9a284fa 100644
--- a/src/mongo/db/rs_local_client.cpp
+++ b/src/mongo/db/rs_local_client.cpp
@@ -102,8 +102,7 @@ StatusWith<Shard::QueryResponse> RSLocalClient::queryOnce(
auto replCoord = repl::ReplicationCoordinator::get(opCtx);
boost::optional<ScopeGuard<std::function<void()>>> readSourceGuard;
- if (readConcernLevel == repl::ReadConcernLevel::kMajorityReadConcern ||
- readConcernLevel == repl::ReadConcernLevel::kSnapshotReadConcern) {
+ if (readConcernLevel == repl::ReadConcernLevel::kMajorityReadConcern) {
// Resets to the original read source at the end of this operation.
auto originalReadSource = opCtx->recoveryUnit()->getTimestampReadSource();
boost::optional<Timestamp> originalReadTimestamp;
@@ -118,35 +117,23 @@ StatusWith<Shard::QueryResponse> RSLocalClient::queryOnce(
opCtx->recoveryUnit()->setTimestampReadSource(originalReadSource);
}
});
- // Sets up operation context with majority read snapshot so correct optime can be
- // retrieved.
+ // Sets up operation context with majority read snapshot so correct optime can be retrieved.
opCtx->recoveryUnit()->setTimestampReadSource(RecoveryUnit::ReadSource::kMajorityCommitted);
Status status = opCtx->recoveryUnit()->majorityCommittedSnapshotAvailable();
- if (!status.isOK()) {
- return status;
- }
- // Waits for any writes performed by this ShardLocal instance to be committed and
- // visible.
+ // Waits for any writes performed by this ShardLocal instance to be committed and visible.
Status readConcernStatus = replCoord->waitUntilOpTimeForRead(
- opCtx,
- repl::ReadConcernArgs{_getLastOpTime(), repl::ReadConcernLevel::kMajorityReadConcern});
+ opCtx, repl::ReadConcernArgs{_getLastOpTime(), readConcernLevel});
if (!readConcernStatus.isOK()) {
return readConcernStatus;
}
+ // Informs the storage engine to read from the committed snapshot for the rest of this
+ // operation.
status = opCtx->recoveryUnit()->majorityCommittedSnapshotAvailable();
if (!status.isOK()) {
return status;
}
-
- if (readConcernLevel == repl::ReadConcernLevel::kSnapshotReadConcern) {
- // Snapshot readConcern starts a snapshot at the majority timestamp, acquire the
- // timestamp now and overwrite the majority readConcern used above.
- auto opTime = replCoord->getCurrentCommittedSnapshotOpTime();
- opCtx->recoveryUnit()->setTimestampReadSource(RecoveryUnit::ReadSource::kProvided,
- opTime.getTimestamp());
- }
} else {
invariant(readConcernLevel == repl::ReadConcernLevel::kLocalReadConcern);
}