private void ProcessSyncTransaction(Common.Data.TransactionTypes.Transaction item) { if (item.OperationName != OperationName.Read) { _cache.Remove(item.CacheKey); _queue.DistributorTransactionCallbackQueue.Add(item); } }
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); }
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); }
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); } }
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(); }
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); } }
public void TransactionAnswer(Common.Data.TransactionTypes.Transaction transaction) { _distributorModule.ProcessTransaction(transaction); }
private void ProcessCallbackTransaction(Common.Data.TransactionTypes.Transaction transaction) { _distributorNet.ASendToProxy(transaction.ProxyServerId, new OperationCompleteCommand(transaction)); }
public RemoteResult ProcessTransaction(Common.Data.TransactionTypes.Transaction transaction) { _queue.TransactionQueue.Add(transaction); return(new SuccessResult()); }
public OperationCompleteCommand(Common.Data.TransactionTypes.Transaction transaction) { Transaction = transaction; }