...
In snapshot_read_utils.js, there is a procedure to abort any transaction started by the FSM workload. It runs abortTransaction on all txnNumbers from the latest one the thread could have used down to 0: for (let i = data.txnNumber; i >= 0; i--) { let res = abortTransaction(data.sessionDb, i, abortErrorCodes); if (res.ok === 1) { break; } } Unfortunately, this procedure no longer works. If there is an open transaction with txnNumber=i, then when we run abortTransaction with txnNumber=j>i, we receive an error NoSuchTransaction with message "Given transaction number j does not match any in-progress transactions. The active transaction number is i". Then when we try to run abortTransaction with txnNumber=i, we receive an error TransactionTooOld with message "Cannot start transaction i on session because a newer transaction j has already started". The transaction with txnNumber=i then remains open after the cleanup procedure is done. This can be fixed by running abortTransaction on each txnNumber in increasing order. This issue does not exist on 4.0, since on 4.0, we error if we receive a higher txnNumber without startTransaction:true prior to bumping the txnNumber on Session. This issue is new with the Session refactor.
xgen-internal-githook commented on Fri, 24 Aug 2018 19:36:53 +0000: Author: {'name': 'Tess Avitabile', 'email': 'tess.avitabile@mongodb.com', 'username': 'tessavitabile'} Message: SERVER-36847 Fix procedure to abort in-progress transactions in snapshot_read_utils.js Branch: master https://github.com/mongodb/mongo/commit/70882697008a4f52782ec20953790cbecd1b7add
Click on a version to see all relevant bugs
MongoDB Integration
Learn more about where this data comes from
Bug Scrub Advisor
Streamline upgrades with automated vendor bug scrubs
BugZero Enterprise
Wish you caught this bug sooner? Get proactive today.