diff options
author | Siyuan Zhou <visualzhou@gmail.com> | 2019-06-27 01:17:09 -0400 |
---|---|---|
committer | Siyuan Zhou <visualzhou@gmail.com> | 2019-07-02 14:42:52 -0400 |
commit | de8b171fbd730be5f82d0c4b6a3c378000167246 (patch) | |
tree | 7f95fa6cebcd9065eec313aab02d7c7dbdbc47a8 | |
parent | b2d65bd20f835baeca0cf3b78368cec29a63bf5a (diff) | |
download | mongo-de8b171fbd730be5f82d0c4b6a3c378000167246.tar.gz |
SERVER-41062 Always return TransactionTooLarge rather than BSONObjectTooLarge when transaction is too large to fit in a single applyOps
-rw-r--r-- | src/mongo/db/op_observer_impl.cpp | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/src/mongo/db/op_observer_impl.cpp b/src/mongo/db/op_observer_impl.cpp index fe9442e559b..35cfdb77237 100644 --- a/src/mongo/db/op_observer_impl.cpp +++ b/src/mongo/db/op_observer_impl.cpp @@ -910,24 +910,25 @@ void OpObserverImpl::onTransactionCommit(OperationContext* opCtx) { if (stmts.empty()) return; - BSONObjBuilder applyOpsBuilder; - BSONArrayBuilder opsArray(applyOpsBuilder.subarrayStart("applyOps"_sd)); - for (auto& stmt : stmts) { - opsArray.append(stmt.toBSON()); - } - opsArray.done(); - const NamespaceString cmdNss{"admin", "$cmd"}; + try { + BSONObjBuilder applyOpsBuilder; + BSONArrayBuilder opsArray(applyOpsBuilder.subarrayStart("applyOps"_sd)); + for (auto& stmt : stmts) { + opsArray.append(stmt.toBSON()); + } + opsArray.done(); + const NamespaceString cmdNss{"admin", "$cmd"}; - OperationSessionInfo sessionInfo; - repl::OplogLink oplogLink; - sessionInfo.setSessionId(*opCtx->getLogicalSessionId()); - sessionInfo.setTxnNumber(*opCtx->getTxnNumber()); - StmtId stmtId(0); - oplogLink.prevOpTime = session->getLastWriteOpTime(*opCtx->getTxnNumber()); - // Until we support multiple oplog entries per transaction, prevOpTime should always be null. - invariant(oplogLink.prevOpTime.isNull()); + OperationSessionInfo sessionInfo; + repl::OplogLink oplogLink; + sessionInfo.setSessionId(*opCtx->getLogicalSessionId()); + sessionInfo.setTxnNumber(*opCtx->getTxnNumber()); + StmtId stmtId(0); + oplogLink.prevOpTime = session->getLastWriteOpTime(*opCtx->getTxnNumber()); + // Until we support multiple oplog entries per transaction, prevOpTime should always be + // null. + invariant(oplogLink.prevOpTime.isNull()); - try { auto applyOpCmd = applyOpsBuilder.done(); auto times = replLogApplyOps(opCtx, cmdNss, applyOpCmd, sessionInfo, stmtId, oplogLink); |