diff options
author | Benety Goh <benety@mongodb.com> | 2018-02-20 16:23:57 -0500 |
---|---|---|
committer | Benety Goh <benety@mongodb.com> | 2018-02-20 16:24:18 -0500 |
commit | 9c988ee4d574e401b4e02f480d2758d76af9aec7 (patch) | |
tree | eb47a6361d6a1af67677eee2b36767880106013b | |
parent | f20e0181324386f6c9d0f0c2e5eef6b3a64995c6 (diff) | |
download | mongo-9c988ee4d574e401b4e02f480d2758d76af9aec7.tar.gz |
SERVER-32913 applyOps containing malformed operations cannot run atomically
-rw-r--r-- | src/mongo/db/repl/apply_ops.cpp | 13 |
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()); |