summaryrefslogtreecommitdiff
path: root/src/mongo/db
diff options
context:
space:
mode:
authorJudah Schvimer <judah@mongodb.com>2020-06-01 19:02:23 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-06-08 19:34:41 +0000
commitc7c78598d530710b1e0c8805bfceb37ccde08604 (patch)
treefc178f573bba5e4dea671cce081f76a921304d6b /src/mongo/db
parenta210979713f0f086b044bff070912437e0db7488 (diff)
downloadmongo-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.h13
-rw-r--r--src/mongo/db/session_catalog_mongod.cpp1
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