Changeset 4254 for branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DefaultScheduler.cs
- Timestamp:
- 08/18/10 17:23:09 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DefaultScheduler.cs
r4253 r4254 13 13 namespace HeuristicLab.Hive.Server.Core { 14 14 internal class DefaultScheduler : IScheduler { 15 //private ISessionFactory factory;16 15 17 private static Mutex jobLock = 18 new Mutex(); 16 private static object jobLock = new object(); 19 17 20 18 #region IScheduler Members 21 19 22 public DefaultScheduler() { 23 //factory = ServiceLocator.GetSessionFactory(); 24 } 20 public DefaultScheduler() { } 25 21 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)); 29 24 return (allOfflineJobsForSlave != null && allOfflineJobsForSlave.Count > 0); 30 25 } 31 26 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(); 49 46 } 50 scope.Complete(); 47 /// End Critical section /// 48 49 return jobToCalculate; 51 50 } 52 jobLock.ReleaseMutex();53 /// End Critical section ///54 55 return jobToCalculate;56 51 } 57 52
Note: See TracChangeset
for help on using the changeset viewer.