diff options
author | Judah Schvimer <judah@mongodb.com> | 2020-06-01 19:02:23 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-06-08 19:34:41 +0000 |
commit | c7c78598d530710b1e0c8805bfceb37ccde08604 (patch) | |
tree | fc178f573bba5e4dea671cce081f76a921304d6b /src/mongo/db | |
parent | a210979713f0f086b044bff070912437e0db7488 (diff) | |
download | mongo-c7c78598d530710b1e0c8805bfceb37ccde08604.tar.gz |
SERVER-48527 Aborting in-progress transactions on step-up should clear session state before returning
Diffstat (limited to 'src/mongo/db')
-rw-r--r-- | src/mongo/db/operation_context.h | 13 | ||||
-rw-r--r-- | src/mongo/db/session_catalog_mongod.cpp | 1 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/mongo/db/operation_context.h b/src/mongo/db/operation_context.h index 46626d843b7..d8f92af60cf 100644 --- a/src/mongo/db/operation_context.h +++ b/src/mongo/db/operation_context.h @@ -407,6 +407,19 @@ public: } /** + * Clears metadata associated with a multi-document transaction. + */ + void resetMultiDocumentTransactionState() { + invariant(_inMultiDocumentTransaction); + invariant(!_writeUnitOfWork); + invariant(_ruState == WriteUnitOfWork::RecoveryUnitState::kNotInUnitOfWork); + _inMultiDocumentTransaction = false; + _isStartingMultiDocumentTransaction = false; + _lsid = boost::none; + _txnNumber = boost::none; + } + + /** * Returns whether this operation is starting a multi-document transaction. */ bool isStartingMultiDocumentTransaction() const { diff --git a/src/mongo/db/session_catalog_mongod.cpp b/src/mongo/db/session_catalog_mongod.cpp index 15fc2edca02..7ae2190fe77 100644 --- a/src/mongo/db/session_catalog_mongod.cpp +++ b/src/mongo/db/session_catalog_mongod.cpp @@ -212,6 +212,7 @@ void abortInProgressTransactions(OperationContext* opCtx) { "sessionId"_attr = txnRecord.getSessionId().toBSON(), "txnNumber"_attr = txnRecord.getTxnNum()); txnParticipant.abortTransaction(opCtx); + opCtx->resetMultiDocumentTransactionState(); } } } // namespace |