diff options
author | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2019-02-27 13:42:04 -0500 |
---|---|---|
committer | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2019-03-06 23:18:41 -0500 |
commit | f7492fe762273c1fa41d68275407ca08d1d6a970 (patch) | |
tree | e1ce3ee0f1ea3439937b3735d815bb498dfb1ccf /src/mongo/db/transaction_participant.cpp | |
parent | 2c69836243bf5887eb0ff28c0f5a8cb0ef816164 (diff) | |
download | mongo-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.cpp | 3 |
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); } |