Esempio n. 1
0
 private void ProcessSyncTransaction(Common.Data.TransactionTypes.Transaction item)
 {
     if (item.OperationName != OperationName.Read)
     {
         _cache.Remove(item.CacheKey);
         _queue.DistributorTransactionCallbackQueue.Add(item);
     }
 }
Esempio n. 2
0
        public void DataTimeout(Common.Data.TransactionTypes.Transaction transaction)
        {
            Logger.Logger.Instance.ErrorFormat("Operation timeout with key {0}", transaction.CacheKey);

            transaction.SetError();
            transaction.AddErrorDescription(Errors.TimeoutExpired);

            _cache.Update(transaction.CacheKey, transaction);
        }
Esempio n. 3
0
        public UserTransaction GetTransactionState(UserTransaction transaction)
        {
            var value = _cache.Get(transaction.CacheKey);

            if (value == null)
            {
                var ret = new Common.Data.TransactionTypes.Transaction("", "");
                //todo
                ret.DoesNotExist();
                return(ret.UserTransaction);
            }
            return(value.UserTransaction);
        }
Esempio n. 4
0
        private void AddErrorAndUpdate(Common.Data.TransactionTypes.Transaction item, string error)
        {
            item.SetError();
            item.AddErrorDescription(error);

            if (item.OperationType == OperationType.Sync)
            {
                ProcessSyncTransaction(item);
            }
            else
            {
                _cache.Update(item.CacheKey, item);
            }
        }
Esempio n. 5
0
        private void FinishTransaction(Common.Data.TransactionTypes.Transaction item)
        {
            item.Complete();

            Logger.Logger.Instance.Trace(string.Format("Mainlogic: process data = {0}, result = {1}",
                                                       item.EventHash, !item.IsError));

            if (item.OperationType == OperationType.Sync)
            {
                ProcessSyncTransaction(item);
            }
            else
            {
                _cache.Update(item.CacheKey, item);
            }

            item.PerfTimer.Complete();
            PerfCounters.DistributorCounters.Instance.ProcessPerSec.OperationFinished();
        }
Esempio n. 6
0
        public void TransactionAnswerIncome(Common.Data.TransactionTypes.Transaction transaction)
        {
            var item = _cache.Get(transaction.CacheKey);

            //Так как обработка однопоточная, то если элемента нет в кеше
            // значит, что либо кеш обновляется(только в случае ошибки), либо
            // элемента просто нет в кеше(тоже ошибка)
            if (item == null)
            {
                return;
            }

            if (item.IsError)
            {
                if (transaction.IsError)
                {
                    AddErrorAndUpdate(item, transaction.ErrorDescription);
                }
                return;
            }

            if (transaction.IsError)
            {
                AddErrorAndUpdate(item, transaction.ErrorDescription);
            }

            item.IncreaseTransactionAnswersCount();

            if (item.TransactionAnswersCount > _transaction.CountReplics)
            {
                AddErrorAndUpdate(item, Errors.TransactionCountAnswersError);
                return;
            }

            if (item.TransactionAnswersCount == _transaction.CountReplics)
            {
                FinishTransaction(item);
            }
        }
Esempio n. 7
0
 public void TransactionAnswer(Common.Data.TransactionTypes.Transaction transaction)
 {
     _distributorModule.ProcessTransaction(transaction);
 }
Esempio n. 8
0
 private void ProcessCallbackTransaction(Common.Data.TransactionTypes.Transaction transaction)
 {
     _distributorNet.ASendToProxy(transaction.ProxyServerId, new OperationCompleteCommand(transaction));
 }
Esempio n. 9
0
 public RemoteResult ProcessTransaction(Common.Data.TransactionTypes.Transaction transaction)
 {
     _queue.TransactionQueue.Add(transaction);
     return(new SuccessResult());
 }
Esempio n. 10
0
 public OperationCompleteCommand(Common.Data.TransactionTypes.Transaction transaction)
 {
     Transaction = transaction;
 }