Changeset 4649 for branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDao.cs
- Timestamp:
- 10/28/10 14:52:56 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDao.cs
r4629 r4649 8 8 using DT = HeuristicLab.Services.Hive.Common.DataTransfer; 9 9 using HeuristicLab.Services.Hive.Common.DataTransfer; 10 using HeuristicLab.Services.Hive.DataAccess.Properties; 10 11 11 12 public class HiveDao : IHiveDao { 12 p rivate IContextFactory<HiveDataContext> contextFactory;13 private DataAccess.HiveDataContext db { get { return contextFactory.CurrentContext; } }14 15 public HiveDao(IContextFactory<HiveDataContext> contextFactory) { 16 this.contextFactory = contextFactory;13 public HiveDataContext CreateContext() { 14 return new HiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString); 15 } 16 17 public HiveDao() { 17 18 } 18 19 19 20 #region Job Methods 20 21 public DT.Job GetJob(Guid id) { 21 return Convert.ToDto(db.Jobs.SingleOrDefault(x => x.JobId == id)); 22 using (var db = CreateContext()) { 23 return Convert.ToDto(db.Jobs.SingleOrDefault(x => x.JobId == id)); 24 } 22 25 } 23 26 24 27 public IEnumerable<DT.Job> GetJobs(Expression<Func<Job, bool>> predicate) { 25 return db.Jobs.Where(predicate).Select(x => Convert.ToDto(x)); 28 using (var db = CreateContext()) { 29 return db.Jobs.Where(predicate).Select(x => Convert.ToDto(x)).ToArray(); 30 } 26 31 } 27 32 28 33 public Guid AddJob(DT.Job dto) { 29 var entity = Convert.ToEntity(dto); 30 db.Jobs.InsertOnSubmit(entity); 31 db.SubmitChanges(); 32 return entity.JobId; 34 using (var db = CreateContext()) { 35 var entity = Convert.ToEntity(dto); 36 db.Jobs.InsertOnSubmit(entity); 37 db.SubmitChanges(); 38 return entity.JobId; 39 } 33 40 } 34 41 35 42 public void UpdateJob(DT.Job dto) { 36 var entity = db.Jobs.FirstOrDefault(x => x.JobId == dto.Id); 37 if (entity == null) db.Jobs.InsertOnSubmit(Convert.ToEntity(dto)); 38 else Convert.ToEntity(dto, entity); 39 db.SubmitChanges(); 43 using (var db = CreateContext()) { 44 var entity = db.Jobs.FirstOrDefault(x => x.JobId == dto.Id); 45 if (entity == null) db.Jobs.InsertOnSubmit(Convert.ToEntity(dto)); 46 else Convert.ToEntity(dto, entity); 47 db.SubmitChanges(); 48 } 40 49 } 41 50 42 51 public void DeleteJob(Guid id) { 43 var entity = db.Jobs.FirstOrDefault(x => x.JobId == id); 44 if (entity != null) db.Jobs.DeleteOnSubmit(entity); 45 db.SubmitChanges(); 52 using (var db = CreateContext()) { 53 var entity = db.Jobs.FirstOrDefault(x => x.JobId == id); 54 if (entity != null) db.Jobs.DeleteOnSubmit(entity); 55 db.SubmitChanges(); 56 } 46 57 } 47 58 48 59 public IEnumerable<DT.Job> GetAvailableParentJobs(Guid slaveId) { 49 // todo: slaveId is unused! 50 var query = from ar in db.AssignedResources 51 where ar.Job.JobState == JobState.WaitForChildJobs && 52 (from child in db.Jobs 53 where child.ParentJobId == ar.Job.JobId 54 select child.JobState == JobState.Finished).All(x => x) && 55 (from child in db.Jobs // avoid returning WaitForChildJobs jobs where no child-jobs exist (yet) 56 where child.ParentJobId == ar.Job.JobId 57 select child).Count() > 0 58 orderby ar.Job.Priority descending 59 select Convert.ToDto(ar.Job); 60 return query; 60 using (var db = CreateContext()) { 61 // todo: slaveId is unused! 62 var query = from ar in db.AssignedResources 63 where ar.Job.JobState == JobState.WaitingForChildJobs && 64 (from child in db.Jobs 65 where child.ParentJobId == ar.Job.JobId 66 select child.JobState == JobState.Finished).All(x => x) && 67 (from child in db.Jobs // avoid returning WaitForChildJobs jobs where no child-jobs exist (yet) 68 where child.ParentJobId == ar.Job.JobId 69 select child).Count() > 0 70 orderby ar.Job.Priority descending 71 select Convert.ToDto(ar.Job); 72 return query; 73 } 61 74 } 62 75 63 76 public IEnumerable<DT.Job> GetAvailableJobs(DT.Slave slave) { 64 var query = from j in db.Jobs 65 where j.JobState == JobState.Waiting && j.CoresNeeded <= slave.FreeCores && j.MemoryNeeded <= slave.FreeMemory 66 orderby j.Priority descending 67 select Convert.ToDto(j); 68 return query.Union(GetAvailableParentJobs(slave.Id)).OrderByDescending(x => x.Priority).ToArray(); 77 using (var db = CreateContext()) { 78 var query = from j in db.Jobs 79 where j.JobState == JobState.Waiting && j.CoresNeeded <= slave.FreeCores && j.MemoryNeeded <= slave.FreeMemory 80 orderby j.Priority descending 81 select Convert.ToDto(j); 82 return query.Union(GetAvailableParentJobs(slave.Id)).OrderByDescending(x => x.Priority).ToArray(); 83 } 69 84 } 70 85 #endregion … … 73 88 74 89 public DT.JobData GetJobData(Guid id) { 75 return Convert.ToDto(db.JobDatas.SingleOrDefault(x => x.JobId == id)); 90 using (var db = CreateContext()) { 91 return Convert.ToDto(db.JobDatas.SingleOrDefault(x => x.JobId == id)); 92 } 76 93 } 77 94 78 95 public IEnumerable<DT.JobData> GetJobDatas(Expression<Func<JobData, bool>> predicate) { 79 return db.JobDatas.Where(predicate).Select(x => Convert.ToDto(x)); 96 using (var db = CreateContext()) { 97 return db.JobDatas.Where(predicate).Select(x => Convert.ToDto(x)).ToArray(); 98 } 80 99 } 81 100 82 101 public Guid AddJobData(DT.JobData dto) { 83 var entity = Convert.ToEntity(dto); 84 db.JobDatas.InsertOnSubmit(entity); 85 db.SubmitChanges(); 86 return entity.JobId; 102 using (var db = CreateContext()) { 103 var entity = Convert.ToEntity(dto); 104 db.JobDatas.InsertOnSubmit(entity); 105 db.SubmitChanges(); 106 return entity.JobId; 107 } 87 108 } 88 109 89 110 public void UpdateJobData(DT.JobData dto) { 90 var entity = db.JobDatas.FirstOrDefault(x => x.JobId == dto.Id); 91 if (entity == null) db.JobDatas.InsertOnSubmit(Convert.ToEntity(dto)); 92 else Convert.ToEntity(dto, entity); 93 db.SubmitChanges(); 111 using (var db = CreateContext()) { 112 var entity = db.JobDatas.FirstOrDefault(x => x.JobId == dto.JobId); 113 if (entity == null) db.JobDatas.InsertOnSubmit(Convert.ToEntity(dto)); 114 else Convert.ToEntity(dto, entity); 115 db.SubmitChanges(); 116 } 94 117 } 95 118 96 119 public void DeleteJobData(Guid id) { 97 var entity = db.JobDatas.FirstOrDefault(x => x.JobId == id); // check if all the byte[] is loaded into memory here. otherwise work around to delete without loading it 98 if (entity != null) db.JobDatas.DeleteOnSubmit(entity); 99 db.SubmitChanges(); 120 using (var db = CreateContext()) { 121 var entity = db.JobDatas.FirstOrDefault(x => x.JobId == id); // check if all the byte[] is loaded into memory here. otherwise work around to delete without loading it 122 if (entity != null) db.JobDatas.DeleteOnSubmit(entity); 123 db.SubmitChanges(); 124 } 100 125 } 101 126 #endregion … … 103 128 #region HiveExperiment Methods 104 129 public DT.HiveExperiment GetHiveExperiment(Guid id) { 105 return Convert.ToDto(db.HiveExperiments.SingleOrDefault(x => x.HiveExperimentId == id)); 130 using (var db = CreateContext()) { 131 return Convert.ToDto(db.HiveExperiments.SingleOrDefault(x => x.HiveExperimentId == id)); 132 } 106 133 } 107 134 108 135 public IEnumerable<DT.HiveExperiment> GetHiveExperiments(Expression<Func<HiveExperiment, bool>> predicate) { 109 return db.HiveExperiments.Where(predicate).Select(x => Convert.ToDto(x)); 136 using (var db = CreateContext()) { 137 return db.HiveExperiments.Where(predicate).Select(x => Convert.ToDto(x)).ToArray(); 138 } 110 139 } 111 140 112 141 public Guid AddHiveExperiment(DT.HiveExperiment dto) { 113 var entity = Convert.ToEntity(dto); 114 db.HiveExperiments.InsertOnSubmit(entity); 115 db.SubmitChanges(); 116 return entity.HiveExperimentId; 142 using (var db = CreateContext()) { 143 var entity = Convert.ToEntity(dto); 144 db.HiveExperiments.InsertOnSubmit(entity); 145 db.SubmitChanges(); 146 return entity.HiveExperimentId; 147 } 117 148 } 118 149 119 150 public void UpdateHiveExperiment(DT.HiveExperiment dto) { 120 var entity = db.HiveExperiments.FirstOrDefault(x => x.HiveExperimentId == dto.Id); 121 if (entity == null) db.HiveExperiments.InsertOnSubmit(Convert.ToEntity(dto)); 122 else Convert.ToEntity(dto, entity); 123 db.SubmitChanges(); 151 using (var db = CreateContext()) { 152 var entity = db.HiveExperiments.FirstOrDefault(x => x.HiveExperimentId == dto.Id); 153 if (entity == null) db.HiveExperiments.InsertOnSubmit(Convert.ToEntity(dto)); 154 else Convert.ToEntity(dto, entity); 155 db.SubmitChanges(); 156 } 124 157 } 125 158 126 159 public void DeleteHiveExperiment(Guid id) { 127 var entity = db.HiveExperiments.FirstOrDefault(x => x.HiveExperimentId == id); 128 if (entity != null) db.HiveExperiments.DeleteOnSubmit(entity); 129 db.SubmitChanges(); 130 } 131 #endregion 132 160 using (var db = CreateContext()) { 161 var entity = db.HiveExperiments.FirstOrDefault(x => x.HiveExperimentId == id); 162 if (entity != null) db.HiveExperiments.DeleteOnSubmit(entity); 163 db.SubmitChanges(); 164 } 165 } 166 #endregion 133 167 134 168 #region Slave Methods 135 169 public DT.Slave GetSlave(Guid id) { 136 return Convert.ToDto(db.Resources.OfType<Slave>().SingleOrDefault(x => x.ResourceId == id)); 170 using (var db = CreateContext()) { 171 return Convert.ToDto(db.Resources.OfType<Slave>().SingleOrDefault(x => x.ResourceId == id)); 172 } 137 173 } 138 174 139 175 public IEnumerable<DT.Slave> GetSlaves(Expression<Func<Slave, bool>> predicate) { 140 return db.Resources.OfType<Slave>().Where(predicate).Select(x => Convert.ToDto(x)); 176 using (var db = CreateContext()) { 177 return db.Resources.OfType<Slave>().Where(predicate).Select(x => Convert.ToDto(x)).ToArray(); 178 } 141 179 } 142 180 143 181 public Guid AddSlave(DT.Slave dto) { 144 var entity = Convert.ToEntity(dto); 145 db.Resources.InsertOnSubmit(entity); 146 db.SubmitChanges(); 147 return entity.ResourceId; 182 using (var db = CreateContext()) { 183 var entity = Convert.ToEntity(dto); 184 db.Resources.InsertOnSubmit(entity); 185 db.SubmitChanges(); 186 return entity.ResourceId; 187 } 148 188 } 149 189 150 190 public void UpdateSlave(DT.Slave dto) { 151 var entity = db.Resources.OfType<Slave>().FirstOrDefault(x => x.ResourceId == dto.Id); 152 if (entity == null) db.Resources.InsertOnSubmit(Convert.ToEntity(dto)); 153 else Convert.ToEntity(dto, entity); 154 db.SubmitChanges(); 191 using (var db = CreateContext()) { 192 var entity = db.Resources.OfType<Slave>().FirstOrDefault(x => x.ResourceId == dto.Id); 193 if (entity == null) db.Resources.InsertOnSubmit(Convert.ToEntity(dto)); 194 else Convert.ToEntity(dto, entity); 195 db.SubmitChanges(); 196 } 155 197 } 156 198 157 199 public void DeleteSlave(Guid id) { 158 var entity = db.Resources.OfType<Slave>().FirstOrDefault(x => x.ResourceId == id); 159 if (entity != null) db.Resources.DeleteOnSubmit(entity); 160 db.SubmitChanges(); 200 using (var db = CreateContext()) { 201 var entity = db.Resources.OfType<Slave>().FirstOrDefault(x => x.ResourceId == id); 202 if (entity != null) db.Resources.DeleteOnSubmit(entity); 203 db.SubmitChanges(); 204 } 161 205 } 162 206 #endregion … … 164 208 #region SlaveGroup Methods 165 209 public DT.SlaveGroup GetSlaveGroup(Guid id) { 166 return Convert.ToDto(db.Resources.OfType<SlaveGroup>().SingleOrDefault(x => x.ResourceId == id)); 210 using (var db = CreateContext()) { 211 return Convert.ToDto(db.Resources.OfType<SlaveGroup>().SingleOrDefault(x => x.ResourceId == id)); 212 } 167 213 } 168 214 169 215 public IEnumerable<DT.SlaveGroup> GetSlaveGroups(Expression<Func<SlaveGroup, bool>> predicate) { 170 return db.Resources.OfType<SlaveGroup>().Where(predicate).Select(x => Convert.ToDto(x)); 216 using (var db = CreateContext()) { 217 return db.Resources.OfType<SlaveGroup>().Where(predicate).Select(x => Convert.ToDto(x)).ToArray(); 218 } 171 219 } 172 220 173 221 public Guid AddSlaveGroup(DT.SlaveGroup dto) { 174 var entity = Convert.ToEntity(dto); 175 db.Resources.InsertOnSubmit(entity); 176 db.SubmitChanges(); 177 return entity.ResourceId; 222 using (var db = CreateContext()) { 223 var entity = Convert.ToEntity(dto); 224 db.Resources.InsertOnSubmit(entity); 225 db.SubmitChanges(); 226 return entity.ResourceId; 227 } 178 228 } 179 229 180 230 public void UpdateSlaveGroup(DT.SlaveGroup dto) { 181 var entity = db.Resources.OfType<SlaveGroup>().FirstOrDefault(x => x.ResourceId == dto.Id); 182 if (entity == null) db.Resources.InsertOnSubmit(Convert.ToEntity(dto)); 183 else Convert.ToEntity(dto, entity); 184 db.SubmitChanges(); 231 using (var db = CreateContext()) { 232 var entity = db.Resources.OfType<SlaveGroup>().FirstOrDefault(x => x.ResourceId == dto.Id); 233 if (entity == null) db.Resources.InsertOnSubmit(Convert.ToEntity(dto)); 234 else Convert.ToEntity(dto, entity); 235 db.SubmitChanges(); 236 } 185 237 } 186 238 187 239 public void DeleteSlaveGroup(Guid id) { 188 var entity = db.Resources.OfType<SlaveGroup>().FirstOrDefault(x => x.ResourceId == id); 189 if (entity != null) db.Resources.DeleteOnSubmit(entity); 190 db.SubmitChanges(); 240 using (var db = CreateContext()) { 241 var entity = db.Resources.OfType<SlaveGroup>().FirstOrDefault(x => x.ResourceId == id); 242 if (entity != null) db.Resources.DeleteOnSubmit(entity); 243 db.SubmitChanges(); 244 } 191 245 } 192 246 #endregion … … 194 248 #region Resource Methods 195 249 public DT.Resource GetResource(Guid id) { 196 return Convert.ToDto(db.Resources.SingleOrDefault(x => x.ResourceId == id)); 250 using (var db = CreateContext()) { 251 return Convert.ToDto(db.Resources.SingleOrDefault(x => x.ResourceId == id)); 252 } 197 253 } 198 254 199 255 public IEnumerable<DT.Resource> GetResources(Expression<Func<Resource, bool>> predicate) { 200 return db.Resources.Where(predicate).Select(x => Convert.ToDto(x)); 256 using (var db = CreateContext()) { 257 return db.Resources.Where(predicate).Select(x => Convert.ToDto(x)).ToArray(); 258 } 201 259 } 202 260 203 261 public Guid AddResource(DT.Resource dto) { 204 var entity = Convert.ToEntity(dto); 205 db.Resources.InsertOnSubmit(entity); 206 db.SubmitChanges(); 207 return entity.ResourceId; 262 using (var db = CreateContext()) { 263 var entity = Convert.ToEntity(dto); 264 db.Resources.InsertOnSubmit(entity); 265 db.SubmitChanges(); 266 return entity.ResourceId; 267 } 208 268 } 209 269 210 270 public void UpdateResource(DT.Resource dto) { 211 var entity = db.Resources.FirstOrDefault(x => x.ResourceId == dto.Id); 212 if (entity == null) db.Resources.InsertOnSubmit(Convert.ToEntity(dto)); 213 else Convert.ToEntity(dto, entity); 214 db.SubmitChanges(); 271 using (var db = CreateContext()) { 272 var entity = db.Resources.FirstOrDefault(x => x.ResourceId == dto.Id); 273 if (entity == null) db.Resources.InsertOnSubmit(Convert.ToEntity(dto)); 274 else Convert.ToEntity(dto, entity); 275 db.SubmitChanges(); 276 } 215 277 } 216 278 217 279 public void DeleteResource(Guid id) { 218 var entity = db.Resources.FirstOrDefault(x => x.ResourceId == id); 219 if (entity != null) db.Resources.DeleteOnSubmit(entity); 220 db.SubmitChanges(); 280 using (var db = CreateContext()) { 281 var entity = db.Resources.FirstOrDefault(x => x.ResourceId == id); 282 if (entity != null) db.Resources.DeleteOnSubmit(entity); 283 db.SubmitChanges(); 284 } 221 285 } 222 286 #endregion … … 224 288 #region Authorization Methods 225 289 public bool IsUserAuthorizedForJobs(Guid userId, params Guid[] jobIds) { 226 var userIds = from job in db.Jobs // this needs to be fast!227 where jobIds.Contains(job.JobId)228 select job.UserId;229 return userIds.All(x => x == userId);230 }231 #endregion232 233 290 using (var db = CreateContext()) { 291 var userIds = from job in db.Jobs // this needs to be fast! 292 where jobIds.Contains(job.JobId) 293 select job.UserId; 294 return userIds.All(x => x == userId); 295 } 296 } 297 #endregion 234 298 } 235 299 }
Note: See TracChangeset
for help on using the changeset viewer.