summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/transaction_oplog_application.cpp
diff options
context:
space:
mode:
authorSamy Lanka <samy.lanka@mongodb.com>2020-12-16 03:46:18 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-01-21 04:28:30 +0000
commit5e9d3327d5d08288a932ee77db3be4eb0d45c9c8 (patch)
tree1511073b844a885fc3b68da1e337d7ff8b458629 /src/mongo/db/repl/transaction_oplog_application.cpp
parent80deb6d3a24f6cb3bf60fbce16f7004a259ce99e (diff)
downloadmongo-5e9d3327d5d08288a932ee77db3be4eb0d45c9c8.tar.gz
SERVER-50486 Always interrupt multi-document transactions on step down or step up
Diffstat (limited to 'src/mongo/db/repl/transaction_oplog_application.cpp')
-rw-r--r--src/mongo/db/repl/transaction_oplog_application.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/mongo/db/repl/transaction_oplog_application.cpp b/src/mongo/db/repl/transaction_oplog_application.cpp
index c193b91fbbb..b5f0d1fece3 100644
--- a/src/mongo/db/repl/transaction_oplog_application.cpp
+++ b/src/mongo/db/repl/transaction_oplog_application.cpp
@@ -59,6 +59,8 @@ MONGO_FAIL_POINT_DEFINE(skipReconstructPreparedTransactions);
// conflict error.
MONGO_FAIL_POINT_DEFINE(applyPrepareTxnOpsFailsWithWriteConflict);
+MONGO_FAIL_POINT_DEFINE(hangBeforeSessionCheckOutForApplyPrepare);
+
// Apply the oplog entries for a prepare or a prepared commit during recovery/initial sync.
Status _applyOperationsForTransaction(OperationContext* opCtx,
const std::vector<OplogEntry>& ops,
@@ -419,6 +421,7 @@ Status _applyPrepareTransaction(OperationContext* opCtx,
// The write on transaction table may be applied concurrently, so refreshing state
// from disk may read that write, causing starting a new transaction on an existing
// txnNumber. Thus, we start a new transaction without refreshing state from disk.
+ hangBeforeSessionCheckOutForApplyPrepare.pauseWhileSet();
MongoDOperationContextSessionWithoutRefresh sessionCheckout(opCtx);
auto txnParticipant = TransactionParticipant::get(opCtx);