Esempio n. 1
0
 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);
 }
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 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. 4
0
        private void OnTaskAborted(SlaveTask slaveTask)
        {
            var handler = TaskAborted;

            if (handler != null)
            {
                handler(this, new EventArgs <SlaveTask>(slaveTask));
            }
        }
Esempio n. 5
0
 private void AddSlaveTask(Task task, SlaveTask slaveTask)
 {
     slaveTasksLocker.EnterWriteLock();
     try {
         slaveTasks.Add(task.Id, Tuple.Create(slaveTask, DateTime.Now));
         RegisterSlaveTaskEvents(slaveTask);
     }
     finally { slaveTasksLocker.ExitWriteLock(); }
 }
Esempio n. 6
0
        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)));
            }
        }
Esempio n. 7
0
        private void OnTaskPaused(SlaveTask slaveTask, TaskData taskData)
        {
            var handler = TaskPaused;

            if (handler != null)
            {
                handler(this, new EventArgs <SlaveTask, TaskData>(slaveTask, taskData));
            }
        }
Esempio n. 8
0
 private void RemoveSlaveTask(Guid taskId, SlaveTask slaveTask)
 {
     slaveTasksLocker.EnterWriteLock();
     try {
         slaveTasks.Remove(taskId);
         DeregisterSlaveTaskEvents(slaveTask);
     }
     finally { slaveTasksLocker.ExitWriteLock(); }
 }
Esempio n. 9
0
 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(); }
 }
Esempio n. 10
0
 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(); }
 }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
 private void OnTaskAborted(SlaveTask slaveTask) {
   var handler = TaskAborted;
   if (handler != null) handler(this, new EventArgs<SlaveTask>(slaveTask));
 }
Esempio n. 13
0
 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)));
 }
Esempio n. 14
0
 private void OnTaskPaused(SlaveTask slaveTask, TaskData taskData) {
   var handler = TaskPaused;
   if (handler != null) handler(this, new EventArgs<SlaveTask, TaskData>(slaveTask, taskData));
 }
Esempio n. 15
0
 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);
 }
Esempio n. 16
0
 private void RemoveSlaveTask(Guid taskId, SlaveTask slaveTask) {
   slaveTasksLocker.EnterWriteLock();
   try {
     slaveTasks.Remove(taskId);
     DeregisterSlaveTaskEvents(slaveTask);
   }
   finally { slaveTasksLocker.ExitWriteLock(); }
 }
Esempio n. 17
0
 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(); }
 }
Esempio n. 18
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;
        }
      }
    }