Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/18/10 17:23:09 (14 years ago)
Author:
cneumuel
Message:

some small refactorings (#1159)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DefaultScheduler.cs

    r4253 r4254  
    1313namespace HeuristicLab.Hive.Server.Core {
    1414  internal class DefaultScheduler : IScheduler {
    15     //private ISessionFactory factory;
    1615
    17     private static Mutex jobLock =
    18       new Mutex();
     16    private static object jobLock = new object();
    1917
    2018    #region IScheduler Members
    2119
    22     public DefaultScheduler() {
    23       //factory = ServiceLocator.GetSessionFactory();
    24     }
     20    public DefaultScheduler() { }
    2521
    26     public bool ExistsJobForSlave(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData) {
    27       List<JobDto> allOfflineJobsForSlave =
    28         new List<JobDto>(DaoLocator.JobDao.FindFittingJobsForSlave(State.Offline, hbData.FreeCores, hbData.FreeMemory, hbData.SlaveId));
     22    public bool ExistsJobForSlave(HeartBeatData hbData) {
     23      List<JobDto> allOfflineJobsForSlave = new List<JobDto>(DaoLocator.JobDao.FindFittingJobsForSlave(State.Offline, hbData.FreeCores, hbData.FreeMemory, hbData.SlaveId));
    2924      return (allOfflineJobsForSlave != null && allOfflineJobsForSlave.Count > 0);
    3025    }
    3126
    32     public HeuristicLab.Hive.Contracts.BusinessObjects.JobDto GetNextJobForSlave(Guid slaveId) {
    33       /// Critical section ///
    34       jobLock.WaitOne();
    35       JobDto jobToCalculate = null;
    36       using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = ApplicationConstants.ISOLATION_LEVEL_SCOPE })) {
    37         ClientDto slave = DaoLocator.ClientDao.FindById(slaveId);
    38         LinkedList<JobDto> allOfflineJobsForSlave =
    39           new LinkedList<JobDto>(DaoLocator.JobDao.FindFittingJobsForSlave(State.Offline, slave.NrOfFreeCores, slave.FreeMemory, slave.Id));       
    40         if (allOfflineJobsForSlave != null && allOfflineJobsForSlave.Count > 0) {
    41           jobToCalculate = allOfflineJobsForSlave.First.Value;
    42           jobToCalculate.State = State.Calculating;
    43           jobToCalculate.Client = slave;
    44           jobToCalculate.Client.State = State.Calculating;
    45           jobToCalculate.DateCalculated = DateTime.Now;
    46           DaoLocator.JobDao.AssignSlaveToJob(slave.Id, jobToCalculate.Id);
    47           DaoLocator.JobDao.Update(jobToCalculate);
    48           DaoLocator.ClientDao.Update(jobToCalculate.Client);
     27    public JobDto GetNextJobForSlave(Guid slaveId) {
     28      lock (jobLock) {
     29        /// Critical section ///
     30        JobDto jobToCalculate = null;
     31        using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = ApplicationConstants.ISOLATION_LEVEL_SCOPE })) {
     32          ClientDto slave = DaoLocator.ClientDao.FindById(slaveId);
     33          LinkedList<JobDto> allOfflineJobsForSlave =
     34            new LinkedList<JobDto>(DaoLocator.JobDao.FindFittingJobsForSlave(State.Offline, slave.NrOfFreeCores, slave.FreeMemory, slave.Id));
     35          if (allOfflineJobsForSlave != null && allOfflineJobsForSlave.Count > 0) {
     36            jobToCalculate = allOfflineJobsForSlave.First.Value;
     37            jobToCalculate.State = State.Calculating;
     38            jobToCalculate.Client = slave;
     39            jobToCalculate.Client.State = State.Calculating;
     40            jobToCalculate.DateCalculated = DateTime.Now;
     41            DaoLocator.JobDao.AssignSlaveToJob(slave.Id, jobToCalculate.Id);
     42            DaoLocator.JobDao.Update(jobToCalculate);
     43            DaoLocator.ClientDao.Update(jobToCalculate.Client);
     44          }
     45          scope.Complete();
    4946        }
    50         scope.Complete();
     47        /// End Critical section ///
     48
     49        return jobToCalculate;
    5150      }
    52       jobLock.ReleaseMutex();
    53       /// End Critical section ///
    54 
    55       return jobToCalculate;
    5651    }
    5752
Note: See TracChangeset for help on using the changeset viewer.