summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormatt dannenberg <matt.dannenberg@10gen.com>2015-11-20 07:48:37 -0500
committermatt dannenberg <matt.dannenberg@10gen.com>2015-11-20 10:44:38 -0500
commit463993d94b20b130c8dd1523da5688a561c07862 (patch)
tree4e583c93028ebe18826590e0808c7c9b0be1237e /src
parent8b4f6e5aa491c26b135607bb9d16e3a815491b62 (diff)
downloadmongo-463993d94b20b130c8dd1523da5688a561c07862.tar.gz
SERVER-21590 reject majority readConcern in PV0
Diffstat (limited to 'src')
-rw-r--r--src/mongo/db/dbcommands.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/mongo/db/dbcommands.cpp b/src/mongo/db/dbcommands.cpp
index a40f44dd210..9bd3abddc95 100644
--- a/src/mongo/db/dbcommands.cpp
+++ b/src/mongo/db/dbcommands.cpp
@@ -1389,6 +1389,18 @@ bool Command::run(OperationContext* txn,
repl::ReplicationCoordinator::Mode::modeReplSet ||
testingSnapshotBehaviorInIsolation) &&
readConcernArgs.getLevel() == repl::ReadConcernLevel::kMajorityReadConcern) {
+ // ReadConcern Majority is not supported in ProtocolVersion 0.
+ if (!replCoord->isV1ElectionProtocol()) {
+ auto result = appendCommandStatus(
+ inPlaceReplyBob,
+ {ErrorCodes::ReadConcernMajorityNotEnabled,
+ str::stream() << "Replica sets running protocol version 0 do not support "
+ "readConcern: majority"});
+ inPlaceReplyBob.doneFast();
+ replyBuilder->setMetadata(rpc::makeEmptyMetadata());
+ return result;
+ }
+
Status status = txn->recoveryUnit()->setReadFromMajorityCommittedSnapshot();
// Wait until a snapshot is available.