Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/23/13 10:37:45 (11 years ago)
Author:
pfleck
Message:

#2030
Separated old DTO-Dao from new Dao. DTO-Dao should be replaced completely.
Heartbeat and UpdateTaskState uses new Dao.
DataContext is now closed on ServiceOperation end.

Location:
branches/HivePerformance/sources/HeuristicLab.Services.Hive/3.3
Files:
1 edited
1 moved

Legend:

Unmodified
Added
Removed
  • branches/HivePerformance/sources/HeuristicLab.Services.Hive/3.3

    • Property svn:ignore
      •  

        old new  
        22bin
        33obj
         4*.user
  • branches/HivePerformance/sources/HeuristicLab.Services.Hive/3.3/HiveDtoDao.cs

    r9385 r9391  
    2222using System;
    2323using System.Collections.Generic;
    24 using System.Data.Linq;
    2524using System.Linq;
    2625using System.Linq.Expressions;
     
    2827
    2928namespace HeuristicLab.Services.Hive.DataAccess {
    30   public class HiveDao : IHiveDao {
     29  public class HiveDtoDao : IHiveDtoDao {
    3130    public static HiveDataContext CreateContext(bool longRunning = false) {
    3231      var context = new HiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString);
     
    3534    }
    3635
    37     public HiveDao() { }
     36    public HiveDtoDao() { }
    3837
    3938    #region Task Methods
     
    4342      }
    4443    }
    45 
    46     public Task GetTaskDA(Guid id) {
    47       var db = HiveOperationContext.Current.DataContext;
    48       return GetTaskByIdQuery(db, id).SingleOrDefault();
    49     }
    50 
    51     private static Func<HiveDataContext, Guid, IQueryable<Task>> GetTaskByIdQuery = CompiledQuery.Compile((HiveDataContext db, Guid id) =>
    52       from t in db.Tasks
    53       where t.TaskId == id
    54       select t
    55     );
    5644
    5745    public IEnumerable<DT.Task> GetTasks(Expression<Func<Task, bool>> predicate) {
     
    150138        db.SubmitChanges();
    151139      }
    152     }
    153 
    154     public void UpdateTaskDA(Task task) {
    155       var db = HiveOperationContext.Current.DataContext;
    156       db.SubmitChanges();
    157140    }
    158141
     
    212195    }
    213196
    214     public IQueryable<TaskInfoForScheduler> GetWaitingTasksDA(Slave slave) {
    215       var db = HiveOperationContext.Current.DataContext;
    216 
    217       var parentResources = GetParentResourcesDA(slave.ResourceId);
    218       var resourceIds = parentResources.Select(x => x.ResourceId);
    219       //Originally we checked here if there are parent tasks which should be calculated (with GetParentTasks(resourceIds, count, false);).
    220       //Because there is at the moment no case where this makes sense (there don't exist parent tasks which need to be calculated),
    221       //we skip this step because it's wasted runtime
    222 
    223       return from ar in db.AssignedResources
    224              where resourceIds.Contains(ar.ResourceId)
    225                  && !(ar.Task.IsParentTask && ar.Task.FinishWhenChildJobsFinished)
    226                  && ar.Task.State == TaskState.Waiting
    227                  && ar.Task.CoresNeeded <= slave.FreeCores
    228                  && ar.Task.MemoryNeeded <= slave.FreeMemory
    229              select new TaskInfoForScheduler() { TaskId = ar.Task.TaskId, JobId = ar.Task.JobId, Priority = ar.Task.Priority };
    230     }
    231 
    232     /*private static Func<HiveDataContext, Guid, Slave, IQueryable<TaskInfoForScheduler>> GetWaitingTasksQuery = CompiledQuery.Compile((HiveDataContext db, Guid id, Slave slave) =>
    233       from ar in db.AssignedResources
    234       where ar.ResourceId == id
    235           && !(ar.Task.IsParentTask && ar.Task.FinishWhenChildJobsFinished)
    236           && ar.Task.State == TaskState.Waiting
    237           && ar.Task.CoresNeeded <= slave.FreeCores
    238           && ar.Task.MemoryNeeded <= slave.FreeMemory
    239       select new TaskInfoForScheduler() { TaskId = ar.Task.TaskId, JobId = ar.Task.JobId, Priority = ar.Task.Priority }
    240     );*/
    241 
    242197    public DT.Task UpdateTaskState(Guid taskId, TaskState taskState, Guid? slaveId, Guid? userId, string exception) {
    243198      using (var db = CreateContext()) {
     
    267222        return DT.Convert.ToDto(task);
    268223      }
    269     }
    270 
    271     public Task UpdateTaskStateDA(Guid taskId, TaskState taskState, Guid? slaveId, Guid? userId, string exception) {
    272       var db = HiveOperationContext.Current.DataContext;
    273 
    274       db.StateLogs.InsertOnSubmit(new StateLog {
    275         TaskId = taskId,
    276         State = taskState,
    277         SlaveId = slaveId,
    278         UserId = userId,
    279         Exception = exception,
    280         DateTime = DateTime.Now
    281       });
    282 
    283       var task = GetTaskDA(taskId);
    284       task.State = taskState;
    285 
    286       db.SubmitChanges();
    287 
    288       return task;
    289224    }
    290225    #endregion
     
    581516    }
    582517
    583     public Slave GetSlaveDA(Guid id) {
    584       var db = HiveOperationContext.Current.DataContext;
    585       return GetSlaveByIdQuery(db, id).SingleOrDefault();
    586     }
    587 
    588     private static Func<HiveDataContext, Guid, IQueryable<Slave>> GetSlaveByIdQuery = CompiledQuery.Compile((HiveDataContext db, Guid slaveId) =>
    589       from s in db.Resources.OfType<Slave>()
    590       where s.ResourceId == slaveId
    591       select s
    592     );
    593 
    594518    public IEnumerable<DT.Slave> GetSlaves(Expression<Func<Slave, bool>> predicate) {
    595519      using (var db = CreateContext()) {
     
    614538        db.SubmitChanges();
    615539      }
    616     }
    617 
    618     public void UpdateSlaveDA(Slave slave) {
    619       var db = HiveOperationContext.Current.DataContext;
    620       db.SubmitChanges();
    621540    }
    622541
     
    736655    }
    737656
    738     public IQueryable<Guid> GetAssignedResourcesIdsDA(Guid taskId) {
    739       var db = HiveOperationContext.Current.DataContext;
    740       return GetAssignedResourcesIdQuery(db, taskId);
    741     }
    742 
    743     private static Func<HiveDataContext, Guid, IQueryable<Guid>> GetAssignedResourcesIdQuery = CompiledQuery.Compile((HiveDataContext db, Guid taskId) =>
    744      from ar in db.AssignedResources
    745      where ar.TaskId == taskId
    746      select ar.ResourceId
    747    );
    748 
    749657    /// <summary>
    750658    /// Returns all parent resources of a resource (the given resource is also added)
     
    757665      }
    758666    }
    759 
    760     public IEnumerable<Resource> GetParentResourcesDA(Guid resourceId) {
    761       var db = HiveOperationContext.Current.DataContext;
    762       var child = db.Resources.Single(r => r.ResourceId == resourceId);
    763 
    764       yield return child;
    765       while (child.ParentResource != null) {
    766         child = child.ParentResource;
    767         yield return child;
    768       }
    769     }
    770 
    771     public IEnumerable<Guid> GetParentResourcesIDsDA(Guid resourceId) {
    772       var db = HiveOperationContext.Current.DataContext;
    773       var child = db.Resources.Single(r => r.ResourceId == resourceId);
    774 
    775       yield return resourceId;
    776       while (child.ParentResource != null) {
    777         child = child.ParentResource;
    778         yield return child.ResourceId;
    779       }
    780     }
    781 
    782     public IQueryable<int> GetNumberOfDowntimesFromParentResourcesAtCurrentTimeDA(Guid resourceId, DowntimeType type) {
    783       var db = HiveOperationContext.Current.DataContext;
    784 
    785       var ids = GetParentResourcesIDsDA(resourceId).ToArray();
    786 
    787       return from r in db.Resources
    788              where ids.Contains(r.ResourceId)
    789              select (from d in db.Downtimes
    790                      where d.ResourceId == r.ResourceId && d.DowntimeType == type && (DateTime.Now >= d.StartDate) && (DateTime.Now <= d.EndDate)
    791                      select d).Count();
    792     }
    793 
    794     /*private static Func<HiveDataContext, Guid, DowntimeType, int> GetNumberOfDowntimesAtCurrentTimeQuery =
    795       CompiledQuery.Compile((HiveDataContext db, Guid ids, DowntimeType type) =>
    796         (from d in db.Downtimes
    797          where d.ResourceId == ids && d.DowntimeType == type && (DateTime.Now >= d.StartDate) && (DateTime.Now <= d.EndDate)
    798          select d).Count()
    799     );*/
    800667
    801668    private static void CollectParentResources(ICollection<Resource> resources, Resource resource) {
Note: See TracChangeset for help on using the changeset viewer.