- Timestamp:
- 06/08/11 00:04:16 (13 years ago)
- Location:
- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveClient.cs
r6373 r6381 225 225 226 226 foreach (HiveJob hiveJob in refreshableHiveExperiment.HiveExperiment.HiveJobs) { 227 UploadJobWithChildren(refreshableHiveExperiment.HiveExperiment.Progress, service, hiveJob, null, resourceIds, ref jobCount, totalJobCount, configFilePlugin.Id, refreshableHiveExperiment.HiveExperiment.UseLocalPlugins, refreshableHiveExperiment.HiveExperiment.Id, refreshableHiveExperiment.Log );227 UploadJobWithChildren(refreshableHiveExperiment.HiveExperiment.Progress, service, hiveJob, null, resourceIds, ref jobCount, totalJobCount, configFilePlugin.Id, refreshableHiveExperiment.HiveExperiment.UseLocalPlugins, refreshableHiveExperiment.HiveExperiment.Id, refreshableHiveExperiment.Log, refreshableHiveExperiment.HiveExperiment.IsPrivileged); 228 228 } 229 229 … … 257 257 /// <param name="parentHiveJob">shall be null if its the root job</param> 258 258 /// <param name="groups"></param> 259 private void UploadJobWithChildren(IProgress progress, IHiveService service, HiveJob hiveJob, HiveJob parentHiveJob, IEnumerable<Guid> groups, ref int jobCount, int totalJobCount, Guid configPluginId, bool useLocalPlugins, Guid hiveExperimentId, ILog log ) {259 private void UploadJobWithChildren(IProgress progress, IHiveService service, HiveJob hiveJob, HiveJob parentHiveJob, IEnumerable<Guid> groups, ref int jobCount, int totalJobCount, Guid configPluginId, bool useLocalPlugins, Guid hiveExperimentId, ILog log, bool isPrivileged) { 260 260 jobCount++; 261 261 progress.Status = string.Format("Serializing job {0} of {1}", jobCount, totalJobCount); … … 263 263 List<IPluginDescription> plugins; 264 264 265 if (hiveJob.ItemJob.ComputeInParallel && 266 (hiveJob.ItemJob.Item is Optimization.Experiment || hiveJob.ItemJob.Item is Optimization.BatchRun)) { 265 if (hiveJob.ItemJob.ComputeInParallel && (hiveJob.ItemJob.Item is Optimization.Experiment || hiveJob.ItemJob.Item is Optimization.BatchRun)) { 267 266 hiveJob.Job.IsParentJob = true; 268 267 hiveJob.Job.FinishWhenChildJobsFinished = true; … … 279 278 hiveJob.Job.PluginsNeededIds.Add(configPluginId); 280 279 hiveJob.Job.HiveExperimentId = hiveExperimentId; 280 hiveJob.Job.IsPrivileged = isPrivileged; 281 281 282 282 progress.Status = string.Format("Uploading job {0} of {1} ({2} kb, {3} objects)", jobCount, totalJobCount, jobData.Data.Count() / 1024, hiveJob.ItemJob.GetObjectGraphObjects().Count()); … … 293 293 294 294 foreach (HiveJob child in hiveJob.ChildHiveJobs) { 295 UploadJobWithChildren(progress, service, child, hiveJob, groups, ref jobCount, totalJobCount, configPluginId, useLocalPlugins, hiveExperimentId, log );295 UploadJobWithChildren(progress, service, child, hiveJob, groups, ref jobCount, totalJobCount, configPluginId, useLocalPlugins, hiveExperimentId, log, isPrivileged); 296 296 } 297 297 } -
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveJobs/EngineHiveJob.cs
r6373 r6381 56 56 57 57 // clone operation and remove unnecessary scopes; don't do this earlier to avoid memory problems 58 lock (locker) {58 //lock (locker) { 59 59 ((IAtomicOperation)ItemJob.InitialOperation).Scope.Parent = parentScopeClone; 60 60 ItemJob.InitialOperation = (IOperation)ItemJob.InitialOperation.Clone(); 61 61 ((IAtomicOperation)ItemJob.InitialOperation).Scope.ClearParentScopes(); 62 62 jobData.Data = PersistenceUtil.Serialize(ItemJob, out usedTypes); 63 }63 //} 64 64 65 65 // add type objects from object graph to work around ticket #1527 -
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveJobs/HiveJob.cs
r6373 r6381 25 25 using System.Drawing; 26 26 using System.Linq; 27 using System.Threading; 27 28 using HeuristicLab.Collections; 28 29 using HeuristicLab.Common; … … 37 38 public class HiveJob : NamedItem, IItemTree<HiveJob> { 38 39 protected static object locker = new object(); 40 protected ReaderWriterLockSlim childHiveJobsLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); 39 41 40 42 public override Image ItemImage { … … 109 111 protected ItemList<HiveJob> childHiveJobs; 110 112 public virtual ReadOnlyItemList<HiveJob> ChildHiveJobs { 111 get { return childHiveJobs.AsReadOnly(); } 113 get { 114 childHiveJobsLock.EnterReadLock(); 115 try { 116 return childHiveJobs.AsReadOnly(); 117 } 118 finally { childHiveJobsLock.ExitReadLock(); } 119 } 112 120 } 113 121 … … 117 125 #region Constructors and Cloning 118 126 public HiveJob() { 119 this.Job = new Job() { 120 CoresNeeded = 1, 121 MemoryNeeded = 0 122 }; 127 this.Job = new Job() { CoresNeeded = 1, MemoryNeeded = 0 }; 123 128 job.State = JobState.Offline; 124 129 this.childHiveJobs = new ItemList<HiveJob>(); … … 152 157 this.Job = cloner.Clone(original.job); 153 158 this.ItemJob = cloner.Clone(original.ItemJob); 154 this.childHiveJobs = cloner.Clone(original.childHiveJobs); 159 original.childHiveJobsLock.EnterReadLock(); 160 try { 161 this.childHiveJobs = cloner.Clone(original.childHiveJobs); 162 } 163 finally { original.childHiveJobsLock.ExitReadLock(); } 155 164 this.syncJobsWithOptimizers = original.syncJobsWithOptimizers; 156 165 this.isFinishedJobDownloaded = original.isFinishedJobDownloaded; … … 198 207 199 208 public virtual void AddChildHiveJob(HiveJob hiveJob) { 200 this.childHiveJobs.Add(hiveJob); 209 childHiveJobsLock.EnterWriteLock(); 210 try { 211 this.childHiveJobs.Add(hiveJob); 212 } 213 finally { childHiveJobsLock.ExitWriteLock(); } 201 214 } 202 215 … … 237 250 IEnumerable<Type> usedTypes; 238 251 byte[] jobByteArray = PersistenceUtil.Serialize(this.ItemJob, out usedTypes); 239 240 JobData jobData = new JobData() { 241 JobId = job.Id, 242 Data = jobByteArray 243 }; 244 252 JobData jobData = new JobData() { JobId = job.Id, Data = jobByteArray }; 245 253 PluginUtil.CollectDeclaringPlugins(plugins, usedTypes); 246 247 254 return jobData; 248 255 } … … 295 302 /// </summary> 296 303 public IEnumerable<HiveJob> GetAllHiveJobs() { 297 var jobs = new List<HiveJob>(); 298 jobs.Add(this); 299 foreach (HiveJob child in this.ChildHiveJobs) { 300 jobs.AddRange(child.GetAllHiveJobs()); 301 } 302 return jobs; 304 childHiveJobsLock.EnterReadLock(); 305 try { 306 var jobs = new List<HiveJob>(); 307 jobs.Add(this); 308 foreach (HiveJob child in this.childHiveJobs) { 309 jobs.AddRange(child.GetAllHiveJobs()); 310 } 311 return jobs; 312 } 313 finally { childHiveJobsLock.ExitReadLock(); } 303 314 } 304 315 305 316 public HiveJob GetParentByJobId(Guid jobId) { 306 if (this.ChildHiveJobs.SingleOrDefault(j => j.job.Id == jobId) != null) 307 return this; 308 foreach (HiveJob child in this.childHiveJobs) { 309 HiveJob result = child.GetParentByJobId(jobId); 310 if (result != null) 311 return result; 312 } 313 return null; 317 childHiveJobsLock.EnterReadLock(); 318 try { 319 if (this.ChildHiveJobs.SingleOrDefault(j => j.job.Id == jobId) != null) 320 return this; 321 foreach (HiveJob child in this.childHiveJobs) { 322 HiveJob result = child.GetParentByJobId(jobId); 323 if (result != null) 324 return result; 325 } 326 return null; 327 } 328 finally { childHiveJobsLock.ExitWriteLock(); } 314 329 } 315 330 … … 321 336 return this; 322 337 } else { 323 foreach (HiveJob child in this.ChildHiveJobs) { 324 HiveJob result = child.GetHiveJobByJobId(jobId); 325 if (result != null) 326 return result; 327 } 338 childHiveJobsLock.EnterReadLock(); 339 try { 340 foreach (HiveJob child in this.childHiveJobs) { 341 HiveJob result = child.GetHiveJobByJobId(jobId); 342 if (result != null) 343 return result; 344 } 345 } 346 finally { childHiveJobsLock.ExitReadLock(); } 328 347 } 329 348 return null; … … 331 350 332 351 public void RemoveByJobId(Guid jobId) { 333 IEnumerable<HiveJob> jobs = ChildHiveJobs.Where(j => j.Job.Id == jobId).ToList(); // if Guid.Empty needs to be removed, there could be more than one with this jobId 334 foreach (HiveJob j in jobs) { 335 this.childHiveJobs.Remove(j); 336 } 337 foreach (HiveJob child in ChildHiveJobs) { 338 child.RemoveByJobId(jobId); 339 } 352 childHiveJobsLock.EnterWriteLock(); 353 try { 354 IEnumerable<HiveJob> jobs = childHiveJobs.Where(j => j.Job.Id == jobId).ToList(); 355 foreach (HiveJob j in jobs) { 356 this.childHiveJobs.Remove(j); 357 } 358 foreach (HiveJob child in childHiveJobs) { 359 child.RemoveByJobId(jobId); 360 } 361 } 362 finally { childHiveJobsLock.ExitWriteLock(); } 340 363 } 341 364 342 365 public IEnumerable<IItemTree<HiveJob>> GetChildItems() { 343 return this. childHiveJobs;366 return this.ChildHiveJobs; 344 367 } 345 368 … … 371 394 public void Pause() { 372 395 if (this.Job.IsParentJob) { 373 foreach (var child in ChildHiveJobs) { 374 ServiceLocator.Instance.CallHiveService(s => s.PauseJob(child.job.Id)); 375 } 396 childHiveJobsLock.EnterReadLock(); 397 try { 398 foreach (var child in childHiveJobs) { 399 ServiceLocator.Instance.CallHiveService(s => s.PauseJob(child.job.Id)); 400 } 401 } 402 finally { childHiveJobsLock.ExitReadLock(); } 376 403 } else { 377 404 ServiceLocator.Instance.CallHiveService(s => s.PauseJob(this.job.Id)); … … 381 408 public void Stop() { 382 409 if (this.Job.IsParentJob) { 383 foreach (var child in ChildHiveJobs) { 384 ServiceLocator.Instance.CallHiveService(s => s.StopJob(child.job.Id)); 385 } 410 childHiveJobsLock.EnterReadLock(); 411 try { 412 foreach (var child in childHiveJobs) { 413 ServiceLocator.Instance.CallHiveService(s => s.StopJob(child.job.Id)); 414 } 415 } 416 finally { childHiveJobsLock.ExitReadLock(); } 386 417 } else { 387 418 ServiceLocator.Instance.CallHiveService(s => s.StopJob(this.job.Id)); -
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveJobs/OptimizerHiveJob.cs
r6373 r6381 129 129 private void Optimizers_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) { 130 130 if (syncJobsWithOptimizers && this.ItemJob.ComputeInParallel) { 131 foreach (var item in e.Items) { 132 if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") { 133 this.childHiveJobs.Add(new OptimizerHiveJob(item.Value)); 134 } 135 } 131 childHiveJobsLock.EnterWriteLock(); 132 try { 133 foreach (var item in e.Items) { 134 if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") { 135 this.childHiveJobs.Add(new OptimizerHiveJob(item.Value)); 136 } 137 } 138 } 139 finally { childHiveJobsLock.ExitWriteLock(); } 136 140 } 137 141 } 138 142 private void Optimizers_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) { 139 143 if (syncJobsWithOptimizers && this.ItemJob.ComputeInParallel) { 140 foreach (var item in e.OldItems) { 141 this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value)); 142 } 143 foreach (var item in e.Items) { 144 if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") { 145 this.childHiveJobs.Add(new OptimizerHiveJob(item.Value)); 146 } 147 } 144 childHiveJobsLock.EnterWriteLock(); 145 try { 146 foreach (var item in e.OldItems) { 147 this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value)); 148 } 149 foreach (var item in e.Items) { 150 if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") { 151 this.childHiveJobs.Add(new OptimizerHiveJob(item.Value)); 152 } 153 } 154 } 155 finally { childHiveJobsLock.ExitWriteLock(); } 148 156 } 149 157 } 150 158 private void Optimizers_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) { 151 159 if (syncJobsWithOptimizers && this.ItemJob.ComputeInParallel) { 152 foreach (var item in e.Items) { 153 this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value)); 154 } 160 childHiveJobsLock.EnterWriteLock(); 161 try { 162 foreach (var item in e.Items) { 163 this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value)); 164 } 165 } 166 finally { childHiveJobsLock.ExitWriteLock(); } 155 167 } 156 168 } 157 169 private void Optimizers_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) { 158 170 if (syncJobsWithOptimizers && this.ItemJob.ComputeInParallel) { 159 foreach (var item in e.Items) { 160 this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value)); 161 } 171 childHiveJobsLock.EnterWriteLock(); 172 try { 173 foreach (var item in e.Items) { 174 this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value)); 175 } 176 } 177 finally { childHiveJobsLock.ExitWriteLock(); } 162 178 } 163 179 } … … 182 198 183 199 OptimizerHiveJob child = (OptimizerHiveJob)this.ChildHiveJobs.Single(j => j.Job.Id == childJobId); 184 if (!optimizerJob.ComputeInParallel) { 185 child.syncJobsWithOptimizers = false; 186 child.ItemJob = optimizerJob; 187 child.syncJobsWithOptimizers = true; 188 } 200 childHiveJobsLock.EnterReadLock(); 201 try { 202 if (!optimizerJob.ComputeInParallel) { 203 child.syncJobsWithOptimizers = false; 204 child.ItemJob = optimizerJob; 205 child.syncJobsWithOptimizers = true; 206 } 207 } 208 finally { childHiveJobsLock.ExitReadLock(); } 189 209 syncJobsWithOptimizers = true; 190 210 } … … 243 263 } 244 264 } 245 foreach (OptimizerHiveJob child in childHiveJobs) { 246 child.SetIndexInParentOptimizerList(this); 247 } 265 childHiveJobsLock.EnterReadLock(); 266 try { 267 foreach (OptimizerHiveJob child in childHiveJobs) { 268 child.SetIndexInParentOptimizerList(this); 269 } 270 } 271 finally { childHiveJobsLock.ExitReadLock(); } 248 272 } 249 273 … … 302 326 } 303 327 304 JobData jobData = new JobData() { 305 JobId = job.Id, 306 Data = jobByteArray 307 }; 308 328 JobData jobData = new JobData() { JobId = job.Id, Data = jobByteArray }; 309 329 PluginUtil.CollectDeclaringPlugins(plugins, usedTypes); 310 311 330 return jobData; 312 331 } 313 332 314 333 public OptimizerHiveJob GetChildByOptimizerJob(OptimizerJob optimizerJob) { 315 foreach (OptimizerHiveJob child in ChildHiveJobs) { 316 if (child.ItemJob == optimizerJob) 317 return child; 318 } 319 return null; 334 childHiveJobsLock.EnterReadLock(); 335 try { 336 foreach (OptimizerHiveJob child in childHiveJobs) { 337 if (child.ItemJob == optimizerJob) 338 return child; 339 } 340 return null; 341 } 342 finally { childHiveJobsLock.ExitReadLock(); } 320 343 } 321 344 322 345 public HiveJob<OptimizerJob> GetChildByOptimizer(IOptimizer optimizer) { 323 foreach (OptimizerHiveJob child in ChildHiveJobs) { 324 if (child.ItemJob.Item == optimizer) 325 return child; 326 } 327 return null; 346 childHiveJobsLock.EnterReadLock(); 347 try { 348 foreach (OptimizerHiveJob child in childHiveJobs) { 349 if (child.ItemJob.Item == optimizer) 350 return child; 351 } 352 return null; 353 } 354 finally { childHiveJobsLock.ExitReadLock(); } 328 355 } 329 356 -
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Jobs/ItemJob.cs
r6373 r6381 31 31 [Item("Item Job", "Represents a executable hive job which contains a HeuristicLab Item.")] 32 32 [StorableClass] 33 public abstract class ItemJob : DeepCloneable, IJob {33 public abstract class ItemJob : NamedItem, IJob { 34 34 public virtual bool IsParallelizable { 35 35 get { return true; } -
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Jobs/OptimizerJob.cs
r6373 r6381 86 86 87 87 #region IJob Members 88 89 88 public override ExecutionState ExecutionState { 90 89 get { return Item.ExecutionState; } -
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/RefreshableHiveExperiment.cs
r6373 r6381 395 395 396 396 public override string ToString() { 397 return HiveExperiment.ToString();397 return string.Format("{0} {1}", HiveExperiment.DateCreated.ToString("MM.dd.yyyy HH:mm"), HiveExperiment.ToString()); 398 398 } 399 399 } -
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ServiceClients/HiveExperiment.cs
r6372 r6381 33 33 get { return useLocalPlugins; } 34 34 set { useLocalPlugins = value; } 35 } 36 37 private bool isPrivileged; 38 public bool IsPrivileged { 39 get { return isPrivileged; } 40 set { isPrivileged = value; } 35 41 } 36 42 … … 89 95 this.ResourceNames = "HEAL"; 90 96 this.HiveJobs = new ItemCollection<HiveJob>(); 97 this.DateCreated = DateTime.Now; 91 98 } 92 99 … … 103 110 this.UseLocalPlugins = original.UseLocalPlugins; 104 111 this.ExecutionTime = original.ExecutionTime; 112 this.IsPrivileged = original.IsPrivileged; 105 113 } 106 114 public override IDeepCloneable Clone(Cloner cloner) {
Note: See TracChangeset
for help on using the changeset viewer.