summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2018-02-20 16:23:57 -0500
committerBenety Goh <benety@mongodb.com>2018-02-20 16:24:18 -0500
commit9c988ee4d574e401b4e02f480d2758d76af9aec7 (patch)
treeeb47a6361d6a1af67677eee2b36767880106013b
parentf20e0181324386f6c9d0f0c2e5eef6b3a64995c6 (diff)
downloadmongo-9c988ee4d574e401b4e02f480d2758d76af9aec7.tar.gz
SERVER-32913 applyOps containing malformed operations cannot run atomically
-rw-r--r--src/mongo/db/repl/apply_ops.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/mongo/db/repl/apply_ops.cpp b/src/mongo/db/repl/apply_ops.cpp
index c0c49fe68c3..42e857b0e74 100644
--- a/src/mongo/db/repl/apply_ops.cpp
+++ b/src/mongo/db/repl/apply_ops.cpp
@@ -162,11 +162,16 @@ Status _applyOps(OperationContext* opCtx,
<< redact(opObj));
}
- // Cannot specify timestamp values in an atomic applyOps.
- if (opObj.hasField("ts")) {
+ // Reject malformed operations in an atomic applyOps.
+ try {
+ ReplOperation::parse(IDLParserErrorContext("applyOps"), opObj);
+ } catch (...) {
uasserted(ErrorCodes::AtomicityFailure,
- "cannot apply an op with a timestamp in atomic applyOps mode; "
- "will retry without atomicity");
+ str::stream()
+ << "cannot apply a malformed operation in atomic applyOps mode: "
+ << redact(opObj)
+ << "; will retry without atomicity: "
+ << exceptionToStatus().toString());
}
OldClientContext ctx(opCtx, nss.ns());