void WiredTigerRecoveryUnit::_abort() { try { bool notifyDone = !_prepareTimestamp.isNull(); if (_session && _isActive()) { _txnClose(false); } _setState(State::kAborting); if (MONGO_FAIL_POINT(WTAlwaysNotifyPrepareConflictWaiters)) { notifyDone = true; } if (notifyDone) { _sessionCache->notifyPreparedUnitOfWorkHasCommittedOrAborted(); } for (Changes::const_reverse_iterator it = _changes.rbegin(), end = _changes.rend(); it != end; ++it) { Change* change = it->get(); LOG(2) << "CUSTOM ROLLBACK " << redact(demangleName(typeid(*change))); change->rollback(); } _changes.clear(); } catch (...) { std::terminate(); } _setState(State::kInactive); }
void WiredTigerRecoveryUnit::abandonSnapshot() { invariant(!_inUnitOfWork); if (_active) { // Can't be in a WriteUnitOfWork, so safe to rollback _txnClose(false); } }
void WiredTigerRecoveryUnit::_commit() { // Since we cannot have both a _lastTimestampSet and a _commitTimestamp, we set the // commit time as whichever is non-empty. If both are empty, then _lastTimestampSet will // be boost::none and we'll set the commit time to that. auto commitTime = _commitTimestamp.isNull() ? _lastTimestampSet : _commitTimestamp; try { bool notifyDone = !_prepareTimestamp.isNull(); if (_session && _isActive()) { _txnClose(true); } _setState(State::kCommitting); if (MONGO_FAIL_POINT(WTAlwaysNotifyPrepareConflictWaiters)) { notifyDone = true; } if (notifyDone) { _sessionCache->notifyPreparedUnitOfWorkHasCommittedOrAborted(); } for (Changes::const_iterator it = _changes.begin(), end = _changes.end(); it != end; ++it) { (*it)->commit(commitTime); } _changes.clear(); } catch (...) { std::terminate(); } _setState(State::kInactive); }
void TerarkDbRecoveryUnit::abandonSnapshot() { invariant(!_inUnitOfWork); if (_active) { // Can't be in a WriteUnitOfWork, so safe to rollback _txnClose(false); } _areWriteUnitOfWorksBanned = false; }
void WiredTigerRecoveryUnit::abandonSnapshot() { invariant(!_inUnitOfWork(), toString(_state)); if (_isActive()) { // Can't be in a WriteUnitOfWork, so safe to rollback _txnClose(false); } _setState(State::kInactive); }
void MobileRecoveryUnit::abandonSnapshot() { invariant(!_inUnitOfWork); if (_active) { // We can't be in a WriteUnitOfWork, so it is safe to rollback. _txnClose(false); } _areWriteUnitOfWorksBanned = false; }
void WiredTigerRecoveryUnit::_commit() { if ( _session && _active ) { _txnClose( true ); } for (Changes::const_iterator it = _changes.begin(), end = _changes.end(); it != end; ++it) { (*it)->commit(); } _changes.clear(); }
void WiredTigerRecoveryUnit::_abort() { if ( _session && _active ) { _txnClose( false ); } for (Changes::const_reverse_iterator it = _changes.rbegin(), end = _changes.rend(); it != end; ++it) { (*it)->rollback(); } _changes.clear(); }
void MobileRecoveryUnit::_abort() { if (_session && _active) { _txnClose(false); } for (auto it = _changes.rbegin(); it != _changes.rend(); ++it) { try { (*it)->rollback(); } catch (...) { std::terminate(); } } _changes.clear(); invariant(!_active); }
void MobileRecoveryUnit::_commit() { if (_session && _active) { _txnClose(true); } for (auto& change : _changes) { try { change->commit(boost::none); } catch (...) { std::terminate(); } } _changes.clear(); }
void TerarkDbRecoveryUnit::_commit() { try { if (_active) { _txnClose(true); } for (Changes::const_iterator it = _changes.begin(), end = _changes.end(); it != end; ++it) { (*it)->commit(); } _changes.clear(); invariant(!_active); } catch (...) { std::terminate(); } }
void MobileRecoveryUnit::beginUnitOfWork(OperationContext* opCtx) { invariant(!_areWriteUnitOfWorksBanned); invariant(!_inUnitOfWork); RECOVERY_UNIT_TRACE() << " Unit of work Active."; if (_active) { // Confirm a write transaction is not running invariant(_isReadOnly); // Rollback read transaction running outside wuow _txnClose(false); } _txnOpen(opCtx, false); _inUnitOfWork = true; }
void TerarkDbRecoveryUnit::_abort() { try { if (_active) { _txnClose(false); } for (Changes::const_reverse_iterator it = _changes.rbegin(), end = _changes.rend(); it != end; ++it) { Change* change = *it; LOG(2) << "CUSTOM ROLLBACK " << demangleName(typeid(*change)); change->rollback(); } _changes.clear(); invariant(!_active); } catch (...) { std::terminate(); } }
void WiredTigerRecoveryUnit::commitAndRestart() { invariant( _depth == 0 ); if ( _active ) { _txnClose( true ); } }