private void ProcessData(InnerData data) { _lock.EnterReadLock(); bool exit = _isStart; _lock.ExitReadLock(); if (!exit) { return; } data.Transaction.OperationName = OperationName.RestoreUpdate; data.Transaction.OperationType = OperationType.Async; var result = WriterNet.ProcessSync(_remote, data); if (result is FailNetResult) { Logger.Logger.Instance.InfoFormat("Servers {0} unavailable in recover process", _remote); _asyncTaskModule.DeleteTask(AsyncTasksNames.RestoreLocal); _reader.Stop(); _lock.EnterWriteLock(); _isStart = false; _lock.ExitWriteLock(); } else if (!_local.Equals(_remote)) { _db.Delete(data); } }
private void NoAnswerCallback(AsyncData async) { _asyncTaskModule.StopTask(AsyncTasksNames.RestoreRemote); if (async.IsLast()) { AddServerToFailed(_remoteServer); StartNextServer(); return; } var ret = WriterNet.SendToWriter(_remoteServer, new RestoreCommandWithData(_local[0].ServerId, _local.ToList(), _isModelUpdated, _tableName)); if (ret is FailNetResult) { AddServerToFailed(_remoteServer); StartNextServer(); } else { _asyncTaskModule.StartTask(AsyncTasksNames.RestoreRemote); } }
private int SendNextServer() { var next = _servers.FirstOrDefault(x => !x.Value); if (next.Equals(default(KeyValuePair <ServerId, bool>))) { return(-1); } bool result = WriterNet.ConnectToWriter(next.Key); Logger.Logger.Instance.Debug(string.Format("Connection result = {0}", result), "restore"); var ret = WriterNet.SendToWriter(next.Key, new RestoreCommandWithData(_local[0].ServerId, _local.ToList(), !next.Key.Equals(_local[0].ServerId) && _isModelUpdated, _tableName)); _servers[next.Key] = true; if (ret is FailNetResult) { Logger.Logger.Instance.ErrorFormat( "Restore command for server: {0} failed with result: {1}", next.Key, ret.Description); AddServerToFailed(next.Key); return(1); } _remoteServer = next.Key; return(0); }
private void RestoreAnswerCallback(AsyncData obj) { Logger.Logger.Instance.Debug( string.Format("Async complete = {0}, start = {1}", _reader.IsComplete, _isStart), "restore"); if (_reader.IsComplete && _isStart) { _asyncTaskModule.DeleteTask(AsyncTasksNames.RestoreLocal); _lock.EnterWriteLock(); _isStart = false; _lock.ExitWriteLock(); WriterNet.SendToWriter(_remote, new RestoreCompleteCommand(_local)); _reader.Dispose(); } else { if (_reader.IsQueueEmpty && _isStart) { _reader.GetAnotherData(); } WriterNet.SendToWriter(_remote, new RestoreInProcessCommand(_local)); } }