public void ChildTransactionShouldBeAbortedIfParentIsAborted() { //arrange _txn = _env.BeginTransaction(); var child = _txn.BeginTransaction(); //act _txn.Abort(); //assert Assert.AreEqual(LightningTransactionState.Aborted, child.State); }
public void Rollback(ITransaction transaction) { try { foreach (LMDBCollection collection in _collectionTable.Values) { collection.ResetTemporaryStats(); } ValidateTransaction(transaction); LightningTransaction lmdbTransaction = (LightningTransaction)transaction.InnerObject; lmdbTransaction.Abort(); } catch (TransactionComittedException) { if (LoggerManager.Instance.StorageLogger != null && LoggerManager.Instance.StorageLogger.IsWarnEnabled) { LoggerManager.Instance.StorageLogger.Warn("LMDB.Rollback", " Transaction is comitted already. " + GetFileInfo()); } } catch (TransactionAobrtException) { if (LoggerManager.Instance.StorageLogger != null && LoggerManager.Instance.StorageLogger.IsWarnEnabled) { LoggerManager.Instance.StorageLogger.Warn("LMDB.Rollback", " Transaction is aborted already. " + GetFileInfo()); } } finally { if (_readerTransaction != null) { lock (_readerTransactionLock) { if (_readerTransaction != null) { _readerTransaction.MarkForRollback(); //_readerTransaction = null; } } } RemoveTransactionFromLists(transaction); } }