summaryrefslogtreecommitdiff
path: root/src/mongo/db/commands/txn_cmds.cpp
diff options
context:
space:
mode:
authorSiyuan Zhou <siyuan.zhou@mongodb.com>2018-03-13 20:05:32 -0400
committerSiyuan Zhou <siyuan.zhou@mongodb.com>2018-03-22 19:18:41 -0400
commit4ca974b2165d74c3a9bdc4a765d445f23aaa2664 (patch)
treeca26d6b5fc48312e9ae664c74e9e57e0c8a7f679 /src/mongo/db/commands/txn_cmds.cpp
parentac11c78003b63696ac949995827ed099c8be654d (diff)
downloadmongo-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.cpp14
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;
}