private void ReplayWriteTransaction(TransactionActivityEntry transactionAwareActivityEntry, ref Transaction currentWriteTransaction) { Transaction tx; switch (transactionAwareActivityEntry.ActionType) { case DebugActionType.TransactionStart: tx = _env.NewTransaction(transactionAwareActivityEntry.Flags); currentWriteTransaction = tx; break; case DebugActionType.TransactionCommit: currentWriteTransaction.Commit(); break; case DebugActionType.TransactionRollback: currentWriteTransaction.Rollback(); break; case DebugActionType.TransactionDisposed: currentWriteTransaction.Dispose(); currentWriteTransaction = null; break; default: throw new InvalidOperationException("unsupported action type for readWrite transaction: " + transactionAwareActivityEntry.ActionType); } }
public void RecordTransactionAction(Transaction tx, DebugActionType actionType) { if (IsRecording) { var txAction = new TransactionActivityEntry(tx, actionType); WriteQueue.Enqueue(txAction); WriteAndFlush(txAction); } }
private void ReplayTransactionEntry(TransactionActivityEntry transactionAwareActivityEntry, ref Transaction currentWriteTransaction, Dictionary <long, Queue <Transaction> > readTransactions) { var isReadTx = transactionAwareActivityEntry.Flags == TransactionFlags.Read; if (isReadTx) { ReplayReadTransaction(transactionAwareActivityEntry, readTransactions); } else { ReplayWriteTransaction(transactionAwareActivityEntry, ref currentWriteTransaction); } }
public static BaseActivityEntry FromCsvLine(string csvLine, bool recordOnlyValueLength) { var firstToken = csvLine.Substring(0, csvLine.IndexOf(",", StringComparison.Ordinal)); if (firstToken.StartsWith("Flush")) { return(FlushActivityEntry.FromCsvLine(csvLine)); } if (firstToken.StartsWith("Transaction")) { return(TransactionActivityEntry.FromCsvLine(csvLine, recordOnlyValueLength)); } return(WriteActivityEntry.FromCsvLine(csvLine, recordOnlyValueLength)); }
private void ReplayReadTransaction(TransactionActivityEntry transactionTransactionAwareActivityEntry, Dictionary <long, Queue <Transaction> > readTransactions) { var txId = transactionTransactionAwareActivityEntry.TransactionId.Value; Queue <Transaction> transactionGroup; switch (transactionTransactionAwareActivityEntry.ActionType) { case DebugActionType.TransactionStart: var tx = _env.NewTransaction(transactionTransactionAwareActivityEntry.Flags); if (readTransactions.TryGetValue(txId, out transactionGroup)) { transactionGroup.Enqueue(tx); } else { var queue = new Queue <Transaction>(); queue.Enqueue(tx); readTransactions[txId] = queue; } break; case DebugActionType.TransactionDisposed: if (readTransactions.TryGetValue(txId, out transactionGroup) && transactionGroup.Count > 0) { var txAboutToDestroy = transactionGroup.Dequeue(); txAboutToDestroy.Dispose(); if (transactionGroup.Count == 0) { readTransactions.Remove(txId); } } break; default: throw new InvalidOperationException("unsupported action type for readOnly transaction: " + transactionTransactionAwareActivityEntry.ActionType); } }
private void ReplayWriteTransaction(TransactionActivityEntry transactionAwareActivityEntry, ref Transaction currentWriteTransaction) { Transaction tx; switch (transactionAwareActivityEntry.ActionType) { case DebugActionType.TransactionStart: tx = _env.NewTransaction(transactionAwareActivityEntry.Flags); currentWriteTransaction = tx; break; case DebugActionType.TransactionCommit: currentWriteTransaction.Commit(); break; case DebugActionType.TransactionRollback: currentWriteTransaction.Rollback(); break; case DebugActionType.TransactionDisposing: currentWriteTransaction.Dispose(); currentWriteTransaction = null; break; default: throw new InvalidOperationException("unsupported action type for readWrite transaction: " + transactionAwareActivityEntry.ActionType); } }
private void ReplayTransactionEntry(TransactionActivityEntry transactionAwareActivityEntry, ref Transaction currentWriteTransaction, Dictionary<long, Queue<Transaction>> readTransactions) { var isReadTx = transactionAwareActivityEntry.Flags == TransactionFlags.Read; if (isReadTx) { ReplayReadTransaction(transactionAwareActivityEntry, readTransactions); } else { ReplayWriteTransaction(transactionAwareActivityEntry, ref currentWriteTransaction); } }
private void ReplayReadTransaction(TransactionActivityEntry transactionTransactionAwareActivityEntry, Dictionary<long, Queue<Transaction>> readTransactions) { var txId = transactionTransactionAwareActivityEntry.TransactionId.Value; Queue<Transaction> transactionGroup; switch (transactionTransactionAwareActivityEntry.ActionType) { case DebugActionType.TransactionStart: var tx = _env.NewTransaction(transactionTransactionAwareActivityEntry.Flags); if (readTransactions.TryGetValue(txId, out transactionGroup)) { transactionGroup.Enqueue(tx); } else { var queue = new Queue<Transaction>(); queue.Enqueue(tx); readTransactions[txId] = queue; } break; case DebugActionType.TransactionDisposing: if (readTransactions.TryGetValue(txId, out transactionGroup) && transactionGroup.Count > 0) { var txAboutToDestroy = transactionGroup.Dequeue(); txAboutToDestroy.Dispose(); if (transactionGroup.Count == 0) { readTransactions.Remove(txId); } } break; default: throw new InvalidOperationException("unsupported action type for readOnly transaction: " + transactionTransactionAwareActivityEntry.ActionType); } }