diff options
author | Siyuan Zhou <siyuan.zhou@mongodb.com> | 2018-03-13 20:05:32 -0400 |
---|---|---|
committer | Siyuan Zhou <siyuan.zhou@mongodb.com> | 2018-03-22 19:18:41 -0400 |
commit | 4ca974b2165d74c3a9bdc4a765d445f23aaa2664 (patch) | |
tree | ca26d6b5fc48312e9ae664c74e9e57e0c8a7f679 /src/mongo/db/commands/txn_cmds.cpp | |
parent | ac11c78003b63696ac949995827ed099c8be654d (diff) | |
download | mongo-4ca974b2165d74c3a9bdc4a765d445f23aaa2664.tar.gz |
SERVER-33217 Add abortTransaction command.
Diffstat (limited to 'src/mongo/db/commands/txn_cmds.cpp')
-rw-r--r-- | src/mongo/db/commands/txn_cmds.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/mongo/db/commands/txn_cmds.cpp b/src/mongo/db/commands/txn_cmds.cpp index 3abfc87c2dd..2397ec26bce 100644 --- a/src/mongo/db/commands/txn_cmds.cpp +++ b/src/mongo/db/commands/txn_cmds.cpp @@ -75,7 +75,7 @@ public: // TODO SERVER-33501 Change this when commitTransaction is retryable. uassert(ErrorCodes::CommandFailed, "Transaction isn't in progress", - opCtx->getWriteUnitOfWork() && session->inMultiDocumentTransaction()); + session->inMultiDocumentTransaction()); auto opObserver = opCtx->getServiceContext()->getOpObserver(); invariant(opObserver); @@ -131,7 +131,7 @@ public: // Running commit after prepare is not allowed yet. // Prepared units of work cannot be released by the session, so we immediately abort here. opCtx->getWriteUnitOfWork()->prepare(); - opCtx->setWriteUnitOfWork(nullptr); + session->abortActiveTransaction(opCtx); return true; } }; @@ -169,6 +169,16 @@ public: const std::string& dbname, const BSONObj& cmdObj, BSONObjBuilder& result) override { + auto session = OperationContextSession::get(opCtx); + uassert( + ErrorCodes::CommandFailed, "abortTransaction must be run within a session", session); + + // TODO SERVER-33501 Change this when abortTransaction is retryable. + uassert(ErrorCodes::CommandFailed, + "Transaction isn't in progress", + session->inMultiDocumentTransaction()); + + session->abortActiveTransaction(opCtx); return true; } |