Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/07/13 22:00:04 (11 years ago)
Author:
ascheibe
Message:

#1712 reintegrated Hive Scheduler branch and made further performance improvements

Location:
trunk/sources/HeuristicLab.Services.Hive
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Services.Hive

  • trunk/sources/HeuristicLab.Services.Hive/3.3/HiveDao.cs

    r9035 r9123  
    8484    }
    8585
    86     public void UpdateTask(DT.Task dto) {
     86    public void UpdateTaskAndPlugins(DT.Task dto) {
    8787      using (var db = CreateContext()) {
    8888        var entity = db.Tasks.FirstOrDefault(x => x.TaskId == dto.Id);
     
    9494          }
    9595        }
     96        db.SubmitChanges();
     97      }
     98    }
     99
     100    public void UpdateTask(DT.Task dto) {
     101      using (var db = CreateContext()) {
     102        var entity = db.Tasks.FirstOrDefault(x => x.TaskId == dto.Id);
     103        if (entity == null) db.Tasks.InsertOnSubmit(DT.Convert.ToEntity(dto));
     104        else DT.Convert.ToEntity(dto, entity);
    96105        db.SubmitChanges();
    97106      }
     
    134143    }
    135144
    136     public IEnumerable<DT.Task> GetWaitingTasks(DT.Slave slave, int count) {
     145    public IEnumerable<TaskInfoForScheduler> GetWaitingTasks(DT.Slave slave) {
    137146      using (var db = CreateContext()) {
    138147        var resourceIds = GetParentResources(slave.Id).Select(r => r.Id);
     
    147156                       && ar.Task.CoresNeeded <= slave.FreeCores
    148157                       && ar.Task.MemoryNeeded <= slave.FreeMemory
    149                     orderby ar.Task.Priority descending, db.Random() // take random task to avoid the race condition that occurs when this method is called concurrently (the same task would be returned)
    150                     select DT.Convert.ToDto(ar.Task);
    151         var waitingTasks = (count == 0 ? query : query.Take(count)).ToArray();
     158                    select new TaskInfoForScheduler() { TaskId = ar.Task.TaskId, JobId = ar.Task.JobId, Priority = ar.Task.Priority };
     159        var waitingTasks = query.ToArray();
    152160        return waitingTasks;
    153161      }
     
    277285    }
    278286
     287    public IEnumerable<JobInfoForScheduler> GetJobInfoForScheduler(Expression<Func<Job, bool>> predicate) {
     288      using (var db = CreateContext()) {
     289        return db.Jobs.Where(predicate).Select(x => new JobInfoForScheduler() { Id = x.JobId, DateCreated = x.DateCreated, OwnerUserId = x.OwnerUserId }).ToArray();
     290      }
     291    }
     292
    279293    public Guid AddJob(DT.Job dto) {
    280294      using (var db = CreateContext()) {
    281295        var entity = DT.Convert.ToEntity(dto);
    282296        db.Jobs.InsertOnSubmit(entity);
     297        if (!db.UserPriorities.Any(x => x.UserId == dto.OwnerUserId))
     298          EnqueueUserPriority(new DT.UserPriority { Id = dto.OwnerUserId, DateEnqueued = dto.DateCreated });
    283299        db.SubmitChanges();
    284300        return entity.JobId;
     
    923939    #endregion
    924940
     941    #region UserPriority Methods
     942    public IEnumerable<DT.UserPriority> GetUserPriorities(Expression<Func<UserPriority, bool>> predicate) {
     943      using (var db = CreateContext()) {
     944        return db.UserPriorities.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
     945      }
     946    }
     947
     948    public void EnqueueUserPriority(DT.UserPriority dto) {
     949      using (var db = CreateContext()) {
     950        var entity = db.UserPriorities.FirstOrDefault(x => x.UserId == dto.Id);
     951        if (entity == null) db.UserPriorities.InsertOnSubmit(DT.Convert.ToEntity(dto));
     952        else DT.Convert.ToEntity(dto, entity);
     953        db.SubmitChanges();
     954      }
     955    }
     956    #endregion
     957
    925958    #region Helpers
    926959    private void CollectChildTasks(HiveDataContext db, Guid parentTaskId, List<Task> collection) {
Note: See TracChangeset for help on using the changeset viewer.