summaryrefslogtreecommitdiff
path: root/src/mongo/db/session_catalog_mongod.cpp
diff options
context:
space:
mode:
authorMatthew Saltz <matthew.saltz@mongodb.com>2019-01-18 15:40:07 -0500
committerMatthew Saltz <matthew.saltz@mongodb.com>2019-02-25 17:48:14 -0500
commit35372c0918d1e6e15cc95ecc2883c080c1b198dc (patch)
tree8d1446cb4ac9ff3a4e0d916862a14613357d830c /src/mongo/db/session_catalog_mongod.cpp
parentbacb6b67706a2c057fcd0f76a38f416b225aa69a (diff)
downloadmongo-35372c0918d1e6e15cc95ecc2883c080c1b198dc.tar.gz
SERVER-37348 Make replication applier batches uninterruptible
Diffstat (limited to 'src/mongo/db/session_catalog_mongod.cpp')
-rw-r--r--src/mongo/db/session_catalog_mongod.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/mongo/db/session_catalog_mongod.cpp b/src/mongo/db/session_catalog_mongod.cpp
index 7ed1d5359af..f99cce19ef8 100644
--- a/src/mongo/db/session_catalog_mongod.cpp
+++ b/src/mongo/db/session_catalog_mongod.cpp
@@ -242,7 +242,7 @@ void MongoDOperationContextSession::checkOut(OperationContext* opCtx, const std:
MongoDOperationContextSessionWithoutRefresh::MongoDOperationContextSessionWithoutRefresh(
OperationContext* opCtx)
- : _operationContextSession(opCtx) {
+ : _operationContextSession(opCtx), _opCtx(opCtx) {
invariant(!opCtx->getClient()->isInDirectClient());
const auto clientTxnNumber = *opCtx->getTxnNumber();
@@ -250,7 +250,12 @@ MongoDOperationContextSessionWithoutRefresh::MongoDOperationContextSessionWithou
txnParticipant.beginOrContinueTransactionUnconditionally(opCtx, clientTxnNumber);
}
-MongoDOperationContextSessionWithoutRefresh::~MongoDOperationContextSessionWithoutRefresh() =
- default;
+MongoDOperationContextSessionWithoutRefresh::~MongoDOperationContextSessionWithoutRefresh() {
+ const auto txnParticipant = TransactionParticipant::get(_opCtx);
+ // A session on secondaries should never be checked back in with a TransactionParticipant that
+ // isn't prepared, aborted, or committed.
+ invariant(!txnParticipant.inMultiDocumentTransaction() ||
+ txnParticipant.transactionIsPrepared());
+}
} // namespace mongo