private void taskManager_TaskFailed(object sender, EventArgs <Tuple <SlaveTask, TaskData, Exception> > e) { try { SlaveStatusInfo.DecrementUsedCores(e.Value.Item1.CoresNeeded); heartbeatManager.AwakeHeartBeatThread(); SlaveTask slaveTask = e.Value.Item1; TaskData taskData = e.Value.Item2; Exception exception = e.Value.Item3; Task task = wcfService.GetTask(slaveTask.TaskId); if (task == null) { throw new TaskNotFoundException(slaveTask.TaskId); } task.ExecutionTime = slaveTask.ExecutionTime; if (taskData != null) { wcfService.UpdateTaskData(task, taskData, configManager.GetClientInfo().Id, TaskState.Failed, exception.ToString()); } else { wcfService.UpdateJobState(task.Id, TaskState.Failed, exception.ToString()); } SlaveClientCom.Instance.LogMessage(exception.Message); } catch (TaskNotFoundException ex) { SlaveStatusInfo.IncrementTasksFailed(); SlaveClientCom.Instance.LogMessage(ex.ToString()); } catch (Exception ex) { SlaveStatusInfo.IncrementTasksFailed(); SlaveClientCom.Instance.LogMessage(ex.ToString()); } }
public void StartTaskAsync(Task task, TaskData taskData) { SlaveTask slaveTask = null; slaveTasksLocker.EnterUpgradeableReadLock(); try { if (slaveTasks.ContainsKey(task.Id)) { SlaveStatusInfo.IncrementTasksFailed(); throw new TaskAlreadyRunningException(task.Id); } else { slaveTask = new SlaveTask(pluginManager, task.CoresNeeded, log); AddSlaveTask(task, slaveTask); SlaveStatusInfo.IncrementTasksFetched(); } } finally { slaveTasksLocker.ExitUpgradeableReadLock(); } if (slaveTask != null) { try { slaveTask.StartJobAsync(task, taskData); } catch (Exception) { RemoveSlaveTask(task.Id, slaveTask); // clean up and rethrow slaveTask.DisposeAppDomain(); throw; } } }
private void AbortTaskAsync(Guid jobId) { TS.Task.Factory.StartNew(HandleAbortTask, jobId) .ContinueWith((t) => { SlaveStatusInfo.IncrementTasksFailed(); SlaveClientCom.Instance.LogMessage(t.Exception.ToString()); }, TaskContinuationOptions.OnlyOnFaulted); }
private void slaveTask_TaskFailed(object sender, EventArgs <Guid, Exception> e) { SlaveTask slaveTask; slaveTasksLocker.EnterUpgradeableReadLock(); try { slaveTask = slaveTasks[e.Value].Task; RemoveSlaveTask(e.Value, slaveTask); } finally { slaveTasksLocker.ExitUpgradeableReadLock(); } TaskData taskData = null; try { taskData = slaveTask.GetTaskData(); } catch { /* taskData will be null */ } SlaveStatusInfo.IncrementTasksFailed(); OnTaskFailed(slaveTask, taskData, e.Value2); }
private void slaveTask_TaskStopped(object sender, EventArgs <Guid> e) { SlaveTask slaveTask; slaveTasksLocker.EnterUpgradeableReadLock(); try { slaveTask = slaveTasks[e.Value].Task; RemoveSlaveTask(e.Value, slaveTask); } finally { slaveTasksLocker.ExitUpgradeableReadLock(); } TaskData taskData = null; try { taskData = slaveTask.GetTaskData(); SlaveStatusInfo.IncrementTasksFinished(); OnTaskStopped(slaveTask, taskData); } catch (Exception ex) { RemoveSlaveTask(e.Value, slaveTask); SlaveStatusInfo.IncrementTasksFailed(); OnTaskFailed(slaveTask, taskData, ex); } }