diff options
author | Siyuan Zhou <siyuan.zhou@mongodb.com> | 2018-02-28 23:45:50 -0500 |
---|---|---|
committer | Siyuan Zhou <siyuan.zhou@mongodb.com> | 2018-03-05 18:08:47 -0500 |
commit | c7524de57dc3a9d829d8bce43e219c9e011094c5 (patch) | |
tree | 312818f1457c9682f1ef683375e25c767090f4f3 /src/mongo/db/session.cpp | |
parent | 3f94de87680764d74bfb219a07606d46c515cba6 (diff) | |
download | mongo-c7524de57dc3a9d829d8bce43e219c9e011094c5.tar.gz |
SERVER-33216 Implement commitTransaction command.
Diffstat (limited to 'src/mongo/db/session.cpp')
-rw-r--r-- | src/mongo/db/session.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/mongo/db/session.cpp b/src/mongo/db/session.cpp index 145b9bcaf3c..aeb58909af7 100644 --- a/src/mongo/db/session.cpp +++ b/src/mongo/db/session.cpp @@ -482,7 +482,7 @@ void Session::stashTransactionResources(OperationContext* opCtx) { return; } - invariant(opCtx->hasStashedCursor()); + invariant(opCtx->hasStashedCursor() || !_autocommit); if (*opCtx->getTxnNumber() != _activeTxnNumber) { // The session is checked out, so _activeTxnNumber cannot advance due to a user operation. @@ -548,7 +548,8 @@ void Session::unstashTransactionResources(OperationContext* opCtx) { opCtx->setWriteUnitOfWork(WriteUnitOfWork::createForSnapshotResume(opCtx)); } else { auto readConcernArgs = repl::ReadConcernArgs::get(opCtx); - if (readConcernArgs.getLevel() == repl::ReadConcernLevel::kSnapshotReadConcern) { + if (readConcernArgs.getLevel() == repl::ReadConcernLevel::kSnapshotReadConcern || + _txnState == MultiDocumentTransactionState::kInProgress) { opCtx->setWriteUnitOfWork(std::make_unique<WriteUnitOfWork>(opCtx)); _isSnapshotTxn = true; } |