Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/13/15 15:22:51 (9 years ago)
Author:
ascheibe
Message:

#2388

  • prevent disposing of hive data context
  • more cleanups
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HiveStatistics/sources/HeuristicLab.Services.Hive/3.3/Scheduler/NewRoundRobinTaskScheduler.cs

    r12691 r12858  
    3535      if (!tasks.Any()) return Enumerable.Empty<TaskInfoForScheduler>();
    3636
    37       using (var pm = PersistenceManager) {
    38         var userPriorityDao = pm.UserPriorityDao;
    39         var jobDao = pm.JobDao;
     37      var pm = PersistenceManager;
     38      var userPriorityDao = pm.UserPriorityDao;
     39      var jobDao = pm.JobDao;
    4040
    41         var userPriorities = pm.UseTransaction(() => userPriorityDao.GetAll()
    42           .OrderBy(x => x.DateEnqueued)
    43           .ToArray()
    44         );
     41      var userPriorities = pm.UseTransaction(() => userPriorityDao.GetAll()
     42        .OrderBy(x => x.DateEnqueued)
     43        .ToArray()
     44      );
    4545
    46         var userIds = userPriorities.Select(x => x.UserId).ToList();
    47         var jobs = pm.UseTransaction(() => {
    48           return jobDao.GetAll()
    49             .Where(x => userIds.Contains(x.OwnerUserId))
    50             .Select(x => new {
    51               Id = x.JobId,
    52               DateCreated = x.DateCreated,
    53               OwnerUserId = x.OwnerUserId
    54             })
    55             .ToList();
    56         });
     46      var userIds = userPriorities.Select(x => x.UserId).ToList();
     47      var jobs = pm.UseTransaction(() => {
     48        return jobDao.GetAll()
     49          .Where(x => userIds.Contains(x.OwnerUserId))
     50          .Select(x => new {
     51            Id = x.JobId,
     52            DateCreated = x.DateCreated,
     53            OwnerUserId = x.OwnerUserId
     54          })
     55          .ToList();
     56      });
    5757
    58         var taskJobRelations = tasks.Join(jobs,
    59           task => task.JobId,
    60           job => job.Id,
    61           (task, job) => new { Task = task, JobInfo = job })
    62           .OrderByDescending(x => x.Task.Priority)
    63           .ToList();
     58      var taskJobRelations = tasks.Join(jobs,
     59        task => task.JobId,
     60        job => job.Id,
     61        (task, job) => new { Task = task, JobInfo = job })
     62        .OrderByDescending(x => x.Task.Priority)
     63        .ToList();
    6464
    65         var scheduledTasks = new List<TaskInfoForScheduler>();
    66         int priorityIndex = 0;
     65      var scheduledTasks = new List<TaskInfoForScheduler>();
     66      int priorityIndex = 0;
    6767
    68         if (count == 0 || count > taskJobRelations.Count) count = taskJobRelations.Count;
     68      if (count == 0 || count > taskJobRelations.Count) count = taskJobRelations.Count;
    6969
    70         for (int i = 0; i < count; i++) {
    71           var defaultEntry = taskJobRelations.First(); // search first task which is not included yet
    72           var priorityEntries = taskJobRelations.Where(x => x.JobInfo.OwnerUserId == userPriorities[priorityIndex].UserId).ToArray(); // search for tasks with desired user priority
    73           while (!priorityEntries.Any() && priorityIndex < userPriorities.Length - 1) {
     70      for (int i = 0; i < count; i++) {
     71        var defaultEntry = taskJobRelations.First(); // search first task which is not included yet
     72        var priorityEntries = taskJobRelations.Where(x => x.JobInfo.OwnerUserId == userPriorities[priorityIndex].UserId).ToArray(); // search for tasks with desired user priority
     73        while (!priorityEntries.Any() && priorityIndex < userPriorities.Length - 1) {
     74          priorityIndex++;
     75          priorityEntries = taskJobRelations.Where(x => x.JobInfo.OwnerUserId == userPriorities[priorityIndex].UserId).ToArray();
     76        }
     77        if (priorityEntries.Any()) { // tasks with desired user priority found
     78          var priorityEntry = priorityEntries.OrderByDescending(x => x.Task.Priority).ThenBy(x => x.JobInfo.DateCreated).First();
     79          if (defaultEntry.Task.Priority <= priorityEntry.Task.Priority) {
     80            taskJobRelations.Remove(priorityEntry);
     81            scheduledTasks.Add(priorityEntry.Task);
     82            UpdateUserPriority(pm, userPriorities[priorityIndex]);
    7483            priorityIndex++;
    75             priorityEntries = taskJobRelations.Where(x => x.JobInfo.OwnerUserId == userPriorities[priorityIndex].UserId).ToArray();
    76           }
    77           if (priorityEntries.Any()) { // tasks with desired user priority found
    78             var priorityEntry = priorityEntries.OrderByDescending(x => x.Task.Priority).ThenBy(x => x.JobInfo.DateCreated).First();
    79             if (defaultEntry.Task.Priority <= priorityEntry.Task.Priority) {
    80               taskJobRelations.Remove(priorityEntry);
    81               scheduledTasks.Add(priorityEntry.Task);
    82               UpdateUserPriority(pm, userPriorities[priorityIndex]);
    83               priorityIndex++;
    84             } else { // there are other tasks with higher priorities
    85               taskJobRelations.Remove(defaultEntry);
    86               scheduledTasks.Add(defaultEntry.Task);
    87             }
    88           } else {
     84          } else { // there are other tasks with higher priorities
    8985            taskJobRelations.Remove(defaultEntry);
    9086            scheduledTasks.Add(defaultEntry.Task);
    9187          }
    92           if (priorityIndex >= (userPriorities.Length - 1)) priorityIndex = 0;
     88        } else {
     89          taskJobRelations.Remove(defaultEntry);
     90          scheduledTasks.Add(defaultEntry.Task);
    9391        }
    94         return scheduledTasks;
     92        if (priorityIndex >= (userPriorities.Length - 1)) priorityIndex = 0;
    9593      }
     94      return scheduledTasks;
     95
    9696    }
    9797
Note: See TracChangeset for help on using the changeset viewer.