private void DeregisterSlaveTaskEvents(SlaveTask slaveTask) { slaveTask.TaskStarted -= new EventHandler <EventArgs <Guid> >(slaveTask_TaskStarted); slaveTask.TaskPaused -= new EventHandler <EventArgs <Guid> >(slaveTask_TaskPaused); slaveTask.TaskStopped -= new EventHandler <EventArgs <Guid> >(slaveTask_TaskStopped); slaveTask.TaskFailed -= new EventHandler <EventArgs <Guid, Exception> >(slaveTask_TaskFailed); }
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 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 OnTaskAborted(SlaveTask slaveTask) { var handler = TaskAborted; if (handler != null) { handler(this, new EventArgs <SlaveTask>(slaveTask)); } }
private void AddSlaveTask(Task task, SlaveTask slaveTask) { slaveTasksLocker.EnterWriteLock(); try { slaveTasks.Add(task.Id, Tuple.Create(slaveTask, DateTime.Now)); RegisterSlaveTaskEvents(slaveTask); } finally { slaveTasksLocker.ExitWriteLock(); } }
private void OnTaskFailed(SlaveTask slaveTask, TaskData taskData, Exception exception) { var handler = TaskFailed; if (handler != null) { handler(this, new EventArgs <Tuple <SlaveTask, TaskData, Exception> >(new Tuple <SlaveTask, TaskData, Exception>(slaveTask, taskData, exception))); } }
private void OnTaskPaused(SlaveTask slaveTask, TaskData taskData) { var handler = TaskPaused; if (handler != null) { handler(this, new EventArgs <SlaveTask, TaskData>(slaveTask, taskData)); } }
private void RemoveSlaveTask(Guid taskId, SlaveTask slaveTask) { slaveTasksLocker.EnterWriteLock(); try { slaveTasks.Remove(taskId); DeregisterSlaveTaskEvents(slaveTask); } finally { slaveTasksLocker.ExitWriteLock(); } }
private void AddSlaveTask(Task task, SlaveTask slaveTask) { slaveTasksLocker.EnterWriteLock(); try { slaveTasks.Add(task.Id, new SnapshotInfo { Task = slaveTask, LastSnapshot = task.DateCreated.GetValueOrDefault() }); RegisterSlaveTaskEvents(slaveTask); } finally { slaveTasksLocker.ExitWriteLock(); } }
public void StopTaskAsync(Guid taskId) { slaveTasksLocker.EnterUpgradeableReadLock(); try { if (!slaveTasks.ContainsKey(taskId)) { throw new TaskNotRunningException(taskId); } SlaveTask slaveTask = slaveTasks[taskId].Task; slaveTask.StopTask(); } finally { slaveTasksLocker.ExitUpgradeableReadLock(); } }
public void AbortTask(Guid taskId) { SlaveTask slaveTask = null; slaveTasksLocker.EnterUpgradeableReadLock(); try { if (!slaveTasks.ContainsKey(taskId)) { throw new TaskNotRunningException(taskId); } slaveTask = slaveTasks[taskId].Task; if (!slaveTask.IsPrepared) { throw new AppDomainNotCreatedException(); } RemoveSlaveTask(taskId, slaveTask); } finally { slaveTasksLocker.ExitUpgradeableReadLock(); } slaveTask.DisposeAppDomain(); SlaveStatusInfo.IncrementTasksAborted(); OnTaskAborted(slaveTask); }
private void OnTaskAborted(SlaveTask slaveTask) { var handler = TaskAborted; if (handler != null) handler(this, new EventArgs<SlaveTask>(slaveTask)); }
private void OnTaskFailed(SlaveTask slaveTask, TaskData taskData, Exception exception) { var handler = TaskFailed; if (handler != null) handler(this, new EventArgs<Tuple<SlaveTask, TaskData, Exception>>(new Tuple<SlaveTask, TaskData, Exception>(slaveTask, taskData, exception))); }
private void OnTaskPaused(SlaveTask slaveTask, TaskData taskData) { var handler = TaskPaused; if (handler != null) handler(this, new EventArgs<SlaveTask, TaskData>(slaveTask, taskData)); }
private void DeregisterSlaveTaskEvents(SlaveTask slaveTask) { slaveTask.TaskStarted -= new EventHandler<EventArgs<Guid>>(slaveTask_TaskStarted); slaveTask.TaskPaused -= new EventHandler<EventArgs<Guid>>(slaveTask_TaskPaused); slaveTask.TaskStopped -= new EventHandler<EventArgs<Guid>>(slaveTask_TaskStopped); slaveTask.TaskFailed -= new EventHandler<EventArgs<Guid, Exception>>(slaveTask_TaskFailed); }