Esempio n. 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());
            }
        }
Esempio n. 2
0
        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;
                }
            }
        }
Esempio n. 3
0
 private void AbortTaskAsync(Guid jobId)
 {
     TS.Task.Factory.StartNew(HandleAbortTask, jobId)
     .ContinueWith((t) => {
         SlaveStatusInfo.IncrementTasksFailed();
         SlaveClientCom.Instance.LogMessage(t.Exception.ToString());
     }, TaskContinuationOptions.OnlyOnFaulted);
 }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
            }
        }