summaryrefslogtreecommitdiff
path: root/src/mongo/db/read_concern_mongod.cpp
diff options
context:
space:
mode:
authorLingzhi Deng <lingzhi.deng@mongodb.com>2020-04-20 10:43:33 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-04-20 19:57:40 +0000
commite9c00e8abdef460c7174b329288f9e7a1c4d7f86 (patch)
treec2d0ae7d6fcb7fa5125444754c8ea1623e8b1e75 /src/mongo/db/read_concern_mongod.cpp
parent79010118a6bdb727560003ff5a0d83ba05d531b4 (diff)
downloadmongo-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.cpp19
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());