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.Services.Hive/3.3/HiveService.cs

    r16203 r16208  
    520520
    521521    public void UpdateJobState(Guid jobId, DT.JobState jobState) {
    522       RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    523       AuthorizationManager.AuthorizeForJob(jobId, DT.Permission.Full);
     522      if (jobState != JobState.StatisticsPending) return; // only process requests for "StatisticsPending"
     523
     524      RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     525      bool isAdministrator = RoleVerifier.IsInRole(HiveRoles.Administrator);
     526      var currentUserId = UserManager.CurrentUserId;
     527
    524528      var pm = PersistenceManager;
    525529      using (new PerformanceLogger("UpdateJobState")) {
    526530        var jobDao = pm.JobDao;
     531        var projectDao = pm.ProjectDao;
    527532        pm.UseTransaction(() => {
    528533          var job = jobDao.GetById(jobId);
    529534          if (job != null) {
     535
     536            var administrationGrantedProjects = projectDao
     537              .GetAdministrationGrantedProjectsForUser(currentUserId)
     538              .ToList();
     539
     540            // check if user is an admin, or granted to administer a job-parenting project,...
     541            if (!isAdministrator && !administrationGrantedProjects.Contains(job.Project))
     542              AuthorizationManager.AuthorizeForJob(jobId, DT.Permission.Full); // ... or job owner
     543
     544            // note: allow solely state changes from "Online" to "StatisticsPending" = deletion request by user for HiveStatisticGenerator           
    530545            var jobStateEntity = jobState.ToEntity();
    531             // note: allow solely state changes from "Online" to "StatisticsPending" = deletion request by user for HiveStatisticGenerator
    532             // and from "StatisticsPending" to "DeletionPending" = deletion request by HiveStatisticGenerator for EventManager
    533546            if (job.State == DA.JobState.Online && jobStateEntity == DA.JobState.StatisticsPending) {
    534547              job.State = jobStateEntity;
     
    540553              }
    541554              pm.SubmitChanges();
    542             } else if (job.State == DA.JobState.StatisticsPending && jobStateEntity == DA.JobState.DeletionPending) {
    543               job.State = jobStateEntity;
    544               pm.SubmitChanges();
    545555            }
    546556          }
     
    561571        var projectDao = pm.ProjectDao;
    562572        pm.UseTransaction(() => {
     573          var administrationGrantedProjects = projectDao
     574            .GetAdministrationGrantedProjectsForUser(currentUserId)
     575            .ToList();
     576
    563577          foreach (var jobId in jobIds) {
    564578            var job = jobDao.GetById(jobId);
    565579            if (job != null) {
    566580
    567               var administrationGrantedProjects = projectDao
    568                 .GetAdministrationGrantedProjectsForUser(currentUserId)
    569                 .ToList();
    570 
    571               // check if user is granted to administer the job-parenting project
    572               if (isAdministrator || administrationGrantedProjects.Contains(job.Project)) {
    573                 // note: allow solely state changes from "Online" to "StatisticsPending" = deletion request by user for HiveStatisticGenerator
    574                 if (job.State == DA.JobState.Online) {
    575                   job.State = DA.JobState.StatisticsPending;
    576                   foreach (var task in job.Tasks
    577                   .Where(x => x.State == DA.TaskState.Waiting
    578                     || x.State == DA.TaskState.Paused
    579                     || x.State == DA.TaskState.Offline)) {
    580                     task.State = DA.TaskState.Aborted;
    581                   }
    582                   pm.SubmitChanges();
     581              // check if user is an admin, or granted to administer a job-parenting project,...
     582              if (!isAdministrator && !administrationGrantedProjects.Contains(job.Project))
     583                AuthorizationManager.AuthorizeForJob(jobId, DT.Permission.Full); // ... or job owner
     584
     585              // note: allow solely state changes from "Online" to "StatisticsPending" = deletion request by user for HiveStatisticGenerator
     586              var jobStateEntity = jobState.ToEntity();
     587              if (job.State == DA.JobState.Online && jobStateEntity == DA.JobState.StatisticsPending) {
     588                job.State = jobStateEntity;
     589                foreach (var task in job.Tasks
     590                .Where(x => x.State == DA.TaskState.Waiting
     591                  || x.State == DA.TaskState.Paused
     592                  || x.State == DA.TaskState.Offline)) {
     593                  task.State = DA.TaskState.Aborted;
    583594                }
    584               }
     595                pm.SubmitChanges();
     596              }             
    585597            }
    586598          }
Note: See TracChangeset for help on using the changeset viewer.