diff options
author | Suganthi Mani <suganthi.mani@mongodb.com> | 2019-08-28 12:58:46 -0400 |
---|---|---|
committer | Suganthi Mani <suganthi.mani@mongodb.com> | 2019-08-28 17:27:43 -0400 |
commit | 8759a090f778608bdad1b0b1b158a7c2aed6bc27 (patch) | |
tree | 08eb4296f4fd995026c6c887f31fae42e764bda3 /src/mongo/db/session.cpp | |
parent | 490121d145eb5f22ed37c06469093e1f002f9007 (diff) | |
download | mongo-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.cpp | 9 |
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. |