Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
 public void RecordTransactionAction(Transaction tx, DebugActionType actionType)
 {
     if (IsRecording)
     {
         var txAction = new TransactionActivityEntry(tx, actionType);
         WriteQueue.Enqueue(txAction);
         WriteAndFlush(txAction);
     }
 }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
            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));
            }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
 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);
     }
 }
Exemplo n.º 7
0
 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);
     }
 }
Exemplo n.º 8
0
        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);
            }
        }
Exemplo n.º 9
0
 public void RecordTransactionAction(Transaction tx, DebugActionType actionType)
 {
     if (IsRecording)
     {
         var txAction = new TransactionActivityEntry(tx, actionType);
         WriteQueue.Enqueue(txAction);
         WriteAndFlush(txAction);
     }
 }