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()); } }
private void HandleCalculateTask(object taskIdObj) { Guid taskId = (Guid)taskIdObj; Task task = null; int usedCores = 0; try { task = wcfService.GetTask(taskId); if (task == null) { throw new TaskNotFoundException(taskId); } if (ConfigManager.Instance.GetFreeCores() < task.CoresNeeded) { throw new OutOfCoresException(); } if (ConfigManager.Instance.GetFreeMemory() < task.MemoryNeeded) { throw new OutOfMemoryException(); } SlaveStatusInfo.IncrementUsedCores(task.CoresNeeded); usedCores = task.CoresNeeded; TaskData taskData = wcfService.GetTaskData(taskId); if (taskData == null) { throw new TaskDataNotFoundException(taskId); } task = wcfService.UpdateJobState(taskId, TaskState.Calculating, null); if (task == null) { throw new TaskNotFoundException(taskId); } taskManager.StartTaskAsync(task, taskData); } catch (TaskNotFoundException) { SlaveStatusInfo.DecrementUsedCores(usedCores); throw; } catch (TaskDataNotFoundException) { SlaveStatusInfo.DecrementUsedCores(usedCores); throw; } catch (TaskAlreadyRunningException) { SlaveStatusInfo.DecrementUsedCores(usedCores); throw; } catch (OutOfCoresException) { wcfService.UpdateJobState(taskId, TaskState.Waiting, "No more cores available"); throw; } catch (OutOfMemoryException) { wcfService.UpdateJobState(taskId, TaskState.Waiting, "No more memory available"); throw; } catch (Exception e) { SlaveStatusInfo.DecrementUsedCores(usedCores); wcfService.UpdateJobState(taskId, TaskState.Failed, e.ToString()); throw; } }
private void taskManager_TaskAborted(object sender, EventArgs <SlaveTask> e) { var slaveTask = e.Value; var task = wcfService.GetTask(slaveTask.TaskId); wcfService.UpdateJobState(task.Id, TaskState.Aborted, null); SlaveStatusInfo.DecrementUsedCores(e.Value.CoresNeeded); }
private void taskManager_TaskStopped(object sender, EventArgs <SlaveTask, TaskData> e) { try { SlaveStatusInfo.DecrementUsedCores(e.Value.CoresNeeded); heartbeatManager.AwakeHeartBeatThread(); Task task = wcfService.GetTask(e.Value.TaskId); if (task == null) { throw new TaskNotFoundException(e.Value.TaskId); } task.ExecutionTime = e.Value.ExecutionTime; TaskData taskData = e.Value2; wcfService.UpdateTaskData(task, taskData, configManager.GetClientInfo().Id, TaskState.Finished); } catch (TaskNotFoundException ex) { SlaveClientCom.Instance.LogMessage(ex.ToString()); } catch (Exception ex) { SlaveClientCom.Instance.LogMessage(ex.ToString()); } }
private void taskManager_TaskAborted(object sender, EventArgs <SlaveTask> e) { SlaveStatusInfo.DecrementUsedCores(e.Value.CoresNeeded); }