summaryrefslogtreecommitdiff
path: root/src/mongo/db/session.cpp
diff options
context:
space:
mode:
authorSuganthi Mani <suganthi.mani@mongodb.com>2019-08-28 12:58:46 -0400
committerSuganthi Mani <suganthi.mani@mongodb.com>2019-08-28 17:27:43 -0400
commit8759a090f778608bdad1b0b1b158a7c2aed6bc27 (patch)
tree08eb4296f4fd995026c6c887f31fae42e764bda3 /src/mongo/db/session.cpp
parent490121d145eb5f22ed37c06469093e1f002f9007 (diff)
downloadmongo-8759a090f778608bdad1b0b1b158a7c2aed6bc27.tar.gz
SERVER-42398 On primary, abortTransaction and commitTransaction commands should not acquire ticket.
(cherry picked from commit 9dd11ed72971d6d5c00b9208e0200b6895658a87)
Diffstat (limited to 'src/mongo/db/session.cpp')
-rw-r--r--src/mongo/db/session.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/mongo/db/session.cpp b/src/mongo/db/session.cpp
index 337bd40baa5..7149b4fd085 100644
--- a/src/mongo/db/session.cpp
+++ b/src/mongo/db/session.cpp
@@ -779,6 +779,15 @@ void Session::unstashTransactionResources(OperationContext* opCtx, const std::st
uassert(ErrorCodes::InvalidOptions,
"Only the first command in a transaction may specify a readConcern",
readConcernArgs.isEmpty());
+ // On primary, commitTransaction and abortTransaction commands can skip ticketing
+ // mechanism as they don't acquire any new storage resources (except writing to oplog)
+ // but they release any claimed storage resources.
+ if (opCtx->writesAreReplicated() &&
+ (cmdName == "commitTransaction" || cmdName == "abortTransaction")) {
+ auto stashLocker = _txnResourceStash->locker();
+ stashLocker->skipAcquireTicket();
+ }
+
_txnResourceStash->release(opCtx);
_txnResourceStash = boost::none;
// Set the starting active time for this transaction.