summaryrefslogtreecommitdiff
path: root/src/mongo/db/read_concern_mongod.cpp
diff options
context:
space:
mode:
authorMatthew Russotto <matthew.russotto@10gen.com>2018-12-06 15:53:36 -0500
committerMatthew Russotto <matthew.russotto@10gen.com>2018-12-06 15:53:43 -0500
commit7cc3c41cf8060966545c844e4d83c7d0ff3994e8 (patch)
tree51e480d76a1b9625e62202936ff3114e85105142 /src/mongo/db/read_concern_mongod.cpp
parent28e38550525a1e338ea2882da3ddce518771627f (diff)
downloadmongo-7cc3c41cf8060966545c844e4d83c7d0ff3994e8.tar.gz
SERVER-34620 Make speculative read atClusterTime not wait for the given cluster time to be majority-committed
Diffstat (limited to 'src/mongo/db/read_concern_mongod.cpp')
-rw-r--r--src/mongo/db/read_concern_mongod.cpp26
1 files changed, 6 insertions, 20 deletions
diff --git a/src/mongo/db/read_concern_mongod.cpp b/src/mongo/db/read_concern_mongod.cpp
index 3a2aaad568a..3f00c9890bf 100644
--- a/src/mongo/db/read_concern_mongod.cpp
+++ b/src/mongo/db/read_concern_mongod.cpp
@@ -212,15 +212,6 @@ MONGO_REGISTER_SHIM(waitForReadConcern)
repl::ReplicationCoordinator* const replCoord = repl::ReplicationCoordinator::get(opCtx);
invariant(replCoord);
- // Currently speculative read concern is used only for transactions (equivalently, when the read
- // concern level is 'snapshot'). However, speculative read concern is not yet supported with
- // atClusterTime.
- //
- // TODO SERVER-34620: Re-enable speculative behavior when "atClusterTime" is specified.
- const bool speculative =
- readConcernArgs.getLevel() == repl::ReadConcernLevel::kSnapshotReadConcern &&
- !readConcernArgs.getArgsAtClusterTime();
-
if (readConcernArgs.getLevel() == repl::ReadConcernLevel::kLinearizableReadConcern) {
if (replCoord->getReplicationMode() != repl::ReplicationCoordinator::modeReplSet) {
// For standalone nodes, Linearizable Read is not supported.
@@ -295,19 +286,14 @@ MONGO_REGISTER_SHIM(waitForReadConcern)
}
if (atClusterTime) {
- opCtx->recoveryUnit()->setIgnorePrepared(false);
-
- // TODO(SERVER-34620): We should be using Session::setSpeculativeTransactionReadOpTime when
- // doing speculative execution with atClusterTime.
opCtx->recoveryUnit()->setTimestampReadSource(RecoveryUnit::ReadSource::kProvided,
atClusterTime->asTimestamp());
- return Status::OK();
- }
-
- if ((readConcernArgs.getLevel() == repl::ReadConcernLevel::kMajorityReadConcern ||
- readConcernArgs.getLevel() == repl::ReadConcernLevel::kSnapshotReadConcern) &&
- !speculative &&
- replCoord->getReplicationMode() == repl::ReplicationCoordinator::Mode::modeReplSet) {
+ } else if (readConcernArgs.getLevel() == repl::ReadConcernLevel::kMajorityReadConcern &&
+ replCoord->getReplicationMode() == repl::ReplicationCoordinator::Mode::modeReplSet) {
+ // This block is not used for kSnapshotReadConcern because snapshots are always speculative;
+ // we wait for majority when the transaction commits.
+ // It is not used for atClusterTime because waitUntilOpTimeForRead handles waiting for
+ // the majority snapshot in that case.
const int debugLevel = serverGlobalParams.clusterRole == ClusterRole::ConfigServer ? 1 : 2;