diff options
author | Matthew Russotto <matthew.russotto@10gen.com> | 2018-12-06 15:53:36 -0500 |
---|---|---|
committer | Matthew Russotto <matthew.russotto@10gen.com> | 2018-12-06 15:53:43 -0500 |
commit | 7cc3c41cf8060966545c844e4d83c7d0ff3994e8 (patch) | |
tree | 51e480d76a1b9625e62202936ff3114e85105142 /src/mongo/db/read_concern_mongod.cpp | |
parent | 28e38550525a1e338ea2882da3ddce518771627f (diff) | |
download | mongo-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.cpp | 26 |
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; |