summaryrefslogtreecommitdiff
path: root/src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp')
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp
index e232d1b22ca..9548b660af1 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_recovery_unit.cpp
@@ -750,8 +750,21 @@ Timestamp WiredTigerRecoveryUnit::getPrepareTimestamp() const {
}
void WiredTigerRecoveryUnit::setIgnorePrepared(bool value) {
- _ignorePrepared = (value) ? WiredTigerBeginTxnBlock::IgnorePrepared::kIgnore
- : WiredTigerBeginTxnBlock::IgnorePrepared::kNoIgnore;
+ auto newValue = (value) ? WiredTigerBeginTxnBlock::IgnorePrepared::kIgnore
+ : WiredTigerBeginTxnBlock::IgnorePrepared::kNoIgnore;
+
+ // If there is an open storage transaction, it is not valid to try to change the behavior of
+ // ignoring prepare conflicts, since that behavior is applied when the transaction is opened.
+ invariant(!_isActive(),
+ str::stream() << "Current state: " << toString(_state)
+ << ". Invalid internal state while setting ignore_prepare to: "
+ << value);
+
+ _ignorePrepared = newValue;
+}
+
+bool WiredTigerRecoveryUnit::getIgnorePrepared() const {
+ return _ignorePrepared == WiredTigerBeginTxnBlock::IgnorePrepared::kIgnore;
}
void WiredTigerRecoveryUnit::setTimestampReadSource(ReadSource readSource,