internal TransactionBase(long identifier, ITransactionalReplicator replicator, bool isPrimaryTransaction)
        {
            this.stateMachine            = new TransactionStateMachine(identifier);
            this.id                      = identifier;
            this.LockContexts            = new List <LockContext>();
            this.readLockContexts        = new List <LockContext>();
            this.isPrimaryTx             = isPrimaryTransaction;
            this.transactionalReplicator = replicator;
            this.TransactionRetryDelay   = RetryDelay;

            this.commitSequenceNumber = LogicalSequenceNumber.InvalidLsn.LSN;
        }
        internal void ThrowIfTransactionIsNotActive()
        {
            var state = State;

            if (state == TransactionState.Active)
            {
                // This is fine
            }
            else if (state == TransactionState.Reading)
            {
                // message must indicate 2 reads or write during read is not possible
                throw new InvalidOperationException(TransactionStateMachine.GetTransactionIdFormattedString(SR.Error_ReplicatorTransactionReadInProgress, id));
            }
            else
            {
                throw new InvalidOperationException(TransactionStateMachine.GetTransactionIdFormattedString(SR.Error_ReplicatorTransactionNotActive, id));
            }
        }