diff options
author | Lingzhi Deng <lingzhi.deng@mongodb.com> | 2020-04-20 10:43:33 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-04-20 19:57:40 +0000 |
commit | e9c00e8abdef460c7174b329288f9e7a1c4d7f86 (patch) | |
tree | c2d0ae7d6fcb7fa5125444754c8ea1623e8b1e75 /src/mongo/db/read_concern_mongod.cpp | |
parent | 79010118a6bdb727560003ff5a0d83ba05d531b4 (diff) | |
download | mongo-e9c00e8abdef460c7174b329288f9e7a1c4d7f86.tar.gz |
SERVER-47569: Allow readConcern snapshot outside of transactions (mongod)
Diffstat (limited to 'src/mongo/db/read_concern_mongod.cpp')
-rw-r--r-- | src/mongo/db/read_concern_mongod.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/mongo/db/read_concern_mongod.cpp b/src/mongo/db/read_concern_mongod.cpp index e6b90951325..205506b9f2f 100644 --- a/src/mongo/db/read_concern_mongod.cpp +++ b/src/mongo/db/read_concern_mongod.cpp @@ -300,6 +300,18 @@ Status waitForReadConcernImpl(OperationContext* opCtx, } } + if (readConcernArgs.getLevel() == repl::ReadConcernLevel::kSnapshotReadConcern) { + if (replCoord->getReplicationMode() != repl::ReplicationCoordinator::modeReplSet) { + return {ErrorCodes::NotAReplicaSet, + "node needs to be a replica set member to use readConcern: snapshot"}; + } + if (!opCtx->inMultiDocumentTransaction() && !serverGlobalParams.enableMajorityReadConcern) { + return {ErrorCodes::ReadConcernMajorityNotEnabled, + "read concern level snapshot is not supported when " + "enableMajorityReadConcern=false"}; + } + } + auto afterClusterTime = readConcernArgs.getArgsAfterClusterTime(); auto atClusterTime = readConcernArgs.getArgsAtClusterTime(); @@ -349,13 +361,6 @@ Status waitForReadConcernImpl(OperationContext* opCtx, } } - if (readConcernArgs.getLevel() == repl::ReadConcernLevel::kSnapshotReadConcern) { - if (replCoord->getReplicationMode() != repl::ReplicationCoordinator::modeReplSet) { - return {ErrorCodes::NotAReplicaSet, - "node needs to be a replica set member to use readConcern: snapshot"}; - } - } - if (atClusterTime) { opCtx->recoveryUnit()->setTimestampReadSource(RecoveryUnit::ReadSource::kProvided, atClusterTime->asTimestamp()); |