diff options
Diffstat (limited to 'src/mongo/db/rs_local_client.cpp')
| -rw-r--r-- | src/mongo/db/rs_local_client.cpp | 25 |
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); } |
