summaryrefslogtreecommitdiff
path: root/src/mongo/db/transaction_participant.cpp
diff options
context:
space:
mode:
authorKaloian Manassiev <kaloian.manassiev@mongodb.com>2019-02-27 13:42:04 -0500
committerKaloian Manassiev <kaloian.manassiev@mongodb.com>2019-03-06 23:18:41 -0500
commitf7492fe762273c1fa41d68275407ca08d1d6a970 (patch)
treee1ce3ee0f1ea3439937b3735d815bb498dfb1ccf /src/mongo/db/transaction_participant.cpp
parent2c69836243bf5887eb0ff28c0f5a8cb0ef816164 (diff)
downloadmongo-f7492fe762273c1fa41d68275407ca08d1d6a970.tar.gz
SERVER-38456 On shutdown, stepdown and FCV downgrade only kill sessions with multi-statement transactions
Diffstat (limited to 'src/mongo/db/transaction_participant.cpp')
-rw-r--r--src/mongo/db/transaction_participant.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/mongo/db/transaction_participant.cpp b/src/mongo/db/transaction_participant.cpp
index 720ccecb1e0..feb97ed5d6d 100644
--- a/src/mongo/db/transaction_participant.cpp
+++ b/src/mongo/db/transaction_participant.cpp
@@ -931,6 +931,9 @@ Timestamp TransactionParticipant::Participant::prepareTransaction(
OplogSlot prepareOplogSlot;
{
stdx::lock_guard<Client> lk(*opCtx->getClient());
+ // This check is necessary in order to avoid a race where a session with an active (but not
+ // prepared) transaction is killed, but it still ends up in the prepared state
+ opCtx->checkForInterrupt();
o(lk).txnState.transitionTo(TransactionState::kPrepared);
}