Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/03/18 07:18:26 (6 years ago)
Author:
jzenisek
Message:

#2839: updated job execution implementation in ProjectJobsView

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/HeuristicLab.Clients.Hive/3.3/HiveAdminClient.cs

    r16202 r16208  
    7171    }
    7272
    73     private Dictionary<Guid, HiveItemCollection<Job>> jobs;
    74     public Dictionary<Guid, HiveItemCollection<Job>> Jobs {
     73    private Dictionary<Guid, HiveItemCollection<RefreshableJob>> jobs;
     74    public Dictionary<Guid, HiveItemCollection<RefreshableJob>> Jobs {
    7575      get { return jobs; }
    7676      set {
     
    144144        projects = new ItemList<Project>();
    145145        projectResourceAssignments = new ItemList<AssignedProjectResource>();
    146         jobs = new Dictionary<Guid, HiveItemCollection<Job>>();
     146        jobs = new Dictionary<Guid, HiveItemCollection<RefreshableJob>>();
    147147        projectNames = new Dictionary<Guid, string>();
    148148        resourceNames = new Dictionary<Guid, string>();
     
    161161            service.GetAssignedResourcesForProjectsAdministration(projectIds)
    162162              .ForEach(a => projectResourceAssignments.Add(a));
    163             projectIds.ForEach(p => jobs.Add(p, new HiveItemCollection<Job>()));
     163            projectIds.ForEach(p => jobs.Add(p, new HiveItemCollection<RefreshableJob>()));
    164164            var unsortedJobs = service.GetJobsByProjectIds(projectIds)
    165165              .OrderBy(x => x.DateCreated).ToList();
    166166
    167             unsortedJobs.Where(j => j.State == JobState.DeletionPending).ToList().ForEach(j => jobs[j.ProjectId].Add(j));
    168             unsortedJobs.Where(j => j.State == JobState.StatisticsPending).ToList().ForEach(j => jobs[j.ProjectId].Add(j));
    169             unsortedJobs.Where(j => j.State == JobState.Online).ToList().ForEach(j => jobs[j.ProjectId].Add(j));
     167            unsortedJobs.Where(j => j.State == JobState.DeletionPending).ToList().ForEach(j => jobs[j.ProjectId].Add(new RefreshableJob(j)));
     168            unsortedJobs.Where(j => j.State == JobState.StatisticsPending).ToList().ForEach(j => jobs[j.ProjectId].Add(new RefreshableJob(j)));
     169            unsortedJobs.Where(j => j.State == JobState.Online).ToList().ForEach(j => jobs[j.ProjectId].Add(new RefreshableJob(j)));
     170
     171            foreach (var job in jobs.SelectMany(x => x.Value))
     172              LoadLightweightJob(job);
    170173
    171174            projectNames = service.GetProjectNames();
     
    307310    public void RefreshJobs() {
    308311      var projectIds = new List<Guid>();
    309       jobs = new Dictionary<Guid, HiveItemCollection<Job>>();
     312      jobs = new Dictionary<Guid, HiveItemCollection<RefreshableJob>>();
    310313
    311314      HiveServiceLocator.Instance.CallHiveService(service => {
    312315        service.GetProjectsForAdministration().ForEach(p => projectIds.Add(p.Id));
    313316        if(projectIds.Any()) {
    314           projectIds.ForEach(p => jobs.Add(p, new HiveItemCollection<Job>()));
     317          projectIds.ForEach(p => jobs.Add(p, new HiveItemCollection<RefreshableJob>()));
    315318          var unsortedJobs = service.GetJobsByProjectIds(projectIds)
    316319            .OrderBy(x => x.DateCreated).ToList();
    317           unsortedJobs.Where(j => j.State == JobState.DeletionPending).ToList().ForEach(j => jobs[j.ProjectId].Add(j));
    318           unsortedJobs.Where(j => j.State == JobState.StatisticsPending).ToList().ForEach(j => jobs[j.ProjectId].Add(j));
    319           unsortedJobs.Where(j => j.State == JobState.Online).ToList().ForEach(j => jobs[j.ProjectId].Add(j));
     320         
     321          unsortedJobs.Where(j => j.State == JobState.DeletionPending).ToList().ForEach(j => jobs[j.ProjectId].Add(new RefreshableJob(j)));
     322          unsortedJobs.Where(j => j.State == JobState.StatisticsPending).ToList().ForEach(j => jobs[j.ProjectId].Add(new RefreshableJob(j)));
     323          unsortedJobs.Where(j => j.State == JobState.Online).ToList().ForEach(j => jobs[j.ProjectId].Add(new RefreshableJob(j)));
     324
     325          foreach(var job in jobs.SelectMany(x => x.Value))
     326            LoadLightweightJob(job);
    320327        }
    321328      });
     329    }
     330
     331    public static void LoadLightweightJob(RefreshableJob refreshableJob) {
     332      var job = refreshableJob.Job;
     333      var tasks = HiveServiceLocator.Instance.CallHiveService(s => s.GetLightweightJobTasksWithoutStateLog(job.Id));
     334      if (tasks != null && tasks.Count > 0 && tasks.All(x => x.Id != Guid.Empty)) {
     335        if (tasks.All(x =>
     336          x.State == TaskState.Finished
     337          || x.State == TaskState.Aborted
     338          || x.State == TaskState.Failed)) {
     339          refreshableJob.ExecutionState = ExecutionState.Stopped;
     340          refreshableJob.RefreshAutomatically = false;
     341        } else if (
     342          tasks
     343            .Where(x => x.ParentTaskId != null)
     344            .All(x =>
     345              x.State != TaskState.Waiting
     346              || x.State != TaskState.Transferring
     347              || x.State != TaskState.Calculating)
     348          && tasks
     349             .Where(x => x.ParentTaskId != null)
     350             .Any(x => x.State == TaskState.Paused)) {
     351          refreshableJob.ExecutionState = ExecutionState.Paused;
     352          refreshableJob.RefreshAutomatically = false;
     353        } else if (tasks.Any(x => x.State == TaskState.Calculating
     354                                  || x.State == TaskState.Transferring
     355                                  || x.State == TaskState.Waiting)) {
     356          refreshableJob.ExecutionState = ExecutionState.Started;
     357        }
     358      }
    322359    }
    323360
     
    327364        var unsortedJobs = jobs.Values.ElementAt(i);
    328365
    329         var sortedJobs = new HiveItemCollection<Job>();
    330         sortedJobs.AddRange(unsortedJobs.Where(j => j.State == JobState.DeletionPending));
    331         sortedJobs.AddRange(unsortedJobs.Where(j => j.State == JobState.StatisticsPending));
    332         sortedJobs.AddRange(unsortedJobs.Where(j => j.State == JobState.Online));
     366        var sortedJobs = new HiveItemCollection<RefreshableJob>();
     367        sortedJobs.AddRange(unsortedJobs.Where(j => j.Job.State == JobState.DeletionPending));
     368        sortedJobs.AddRange(unsortedJobs.Where(j => j.Job.State == JobState.StatisticsPending));
     369        sortedJobs.AddRange(unsortedJobs.Where(j => j.Job.State == JobState.Online));
    333370
    334371        jobs[projectId] = sortedJobs;
     
    405442    }
    406443
    407     public static void DeleteJobs(List<Guid> jobIds) {
    408 
     444    public static void RemoveJobs(List<Guid> jobIds) {
    409445      HiveServiceLocator.Instance.CallHiveService((s) => s.UpdateJobStates(jobIds, JobState.StatisticsPending));
     446    }
     447    #endregion
     448
     449    #region Job Handling
     450
     451    public static void ResumeJob(RefreshableJob refreshableJob) {
     452      HiveServiceLocator.Instance.CallHiveService(service => {
     453        foreach (HiveTask task in refreshableJob.GetAllHiveTasks()) {
     454          if (task.Task.State == TaskState.Paused) {
     455            service.RestartTask(task.Task.Id);
     456          }
     457        }
     458      });
     459      refreshableJob.ExecutionState = ExecutionState.Started;
     460    }
     461
     462    public static void PauseJob(RefreshableJob refreshableJob) {
     463      HiveServiceLocator.Instance.CallHiveService(service => {
     464        foreach (HiveTask task in refreshableJob.GetAllHiveTasks()) {
     465          if (task.Task.State != TaskState.Finished && task.Task.State != TaskState.Aborted && task.Task.State != TaskState.Failed)
     466            service.PauseTask(task.Task.Id);
     467        }
     468      });
     469      refreshableJob.ExecutionState = ExecutionState.Paused;
     470    }
     471
     472    public static void StopJob(RefreshableJob refreshableJob) {
     473      HiveServiceLocator.Instance.CallHiveService(service => {
     474        foreach (HiveTask task in refreshableJob.GetAllHiveTasks()) {
     475          if (task.Task.State != TaskState.Finished && task.Task.State != TaskState.Aborted && task.Task.State != TaskState.Failed)
     476            service.StopTask(task.Task.Id);
     477        }
     478      });
     479      refreshableJob.ExecutionState = ExecutionState.Stopped;
     480    }
     481
     482    public static void RemoveJob(RefreshableJob refreshableJob) {
     483      HiveServiceLocator.Instance.CallHiveService((s) => {
     484        s.UpdateJobState(refreshableJob.Id, JobState.StatisticsPending);
     485      });
    410486    }
    411487    #endregion
Note: See TracChangeset for help on using the changeset viewer.