summaryrefslogtreecommitdiff
path: root/src/mongo/db/session.cpp
diff options
context:
space:
mode:
authorSiyuan Zhou <siyuan.zhou@mongodb.com>2018-02-28 23:45:50 -0500
committerSiyuan Zhou <siyuan.zhou@mongodb.com>2018-03-05 18:08:47 -0500
commitc7524de57dc3a9d829d8bce43e219c9e011094c5 (patch)
tree312818f1457c9682f1ef683375e25c767090f4f3 /src/mongo/db/session.cpp
parent3f94de87680764d74bfb219a07606d46c515cba6 (diff)
downloadmongo-c7524de57dc3a9d829d8bce43e219c9e011094c5.tar.gz
SERVER-33216 Implement commitTransaction command.
Diffstat (limited to 'src/mongo/db/session.cpp')
-rw-r--r--src/mongo/db/session.cpp5
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;
}