Пример #1
0
        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());
            }
        }
Пример #2
0
        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;
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
 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());
     }
 }
Пример #5
0
 private void taskManager_TaskAborted(object sender, EventArgs <SlaveTask> e)
 {
     SlaveStatusInfo.DecrementUsedCores(e.Value.CoresNeeded);
 }