Changeset 6725 for branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/OptimizerHiveTask.cs
- Timestamp:
- 09/08/11 16:38:28 (13 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/OptimizerHiveTask.cs
r6721 r6725 30 30 31 31 namespace HeuristicLab.Clients.Hive { 32 public class OptimizerHive Job : HiveJob<OptimizerJob> {32 public class OptimizerHiveTask : HiveTask<OptimizerTask> { 33 33 34 34 #region Constructors and Cloning 35 public OptimizerHive Job() { }36 public OptimizerHive Job(IOptimizer optimizer)35 public OptimizerHiveTask() { } 36 public OptimizerHiveTask(IOptimizer optimizer) 37 37 : this() { 38 this.Item Job = new OptimizerJob(optimizer);39 } 40 public OptimizerHive Job(OptimizerJoboptimizerJob)38 this.ItemTask = new OptimizerTask(optimizer); 39 } 40 public OptimizerHiveTask(OptimizerTask optimizerJob) 41 41 : this() { 42 this.Item Job= optimizerJob;43 } 44 protected OptimizerHive Job(OptimizerHiveJoboriginal, Cloner cloner)42 this.ItemTask = optimizerJob; 43 } 44 protected OptimizerHiveTask(OptimizerHiveTask original, Cloner cloner) 45 45 : base(original, cloner) { 46 46 } 47 47 public override IDeepCloneable Clone(Cloner cloner) { 48 return new OptimizerHive Job(this, cloner);48 return new OptimizerHiveTask(this, cloner); 49 49 } 50 50 #endregion … … 52 52 /// <summary> 53 53 /// if this.Optimizer is an experiment 54 /// Uses the child-optimizers of this.Hive Job and creates HiveJob-childs54 /// Uses the child-optimizers of this.HiveTask and creates HiveTask-childs 55 55 /// if this.Optimizer is a batchrun 56 56 /// Creates a number of child-jobs according to repetitions 57 57 /// </summary> 58 protected override void UpdateChildHive Jobs() {59 base.UpdateChildHive Jobs();60 if ( Job != null && syncJobsWithOptimizers) {61 if (!Item Job.ComputeInParallel) {62 this.childHive Jobs.Clear();58 protected override void UpdateChildHiveTasks() { 59 base.UpdateChildHiveTasks(); 60 if (Task != null && syncTasksWithOptimizers) { 61 if (!ItemTask.ComputeInParallel) { 62 this.childHiveTasks.Clear(); 63 63 } else { 64 if (Item Job.Item is Optimization.Experiment) {65 Optimization.Experiment experiment = (Optimization.Experiment)Item Job.Item;64 if (ItemTask.Item is Optimization.Experiment) { 65 Optimization.Experiment experiment = (Optimization.Experiment)ItemTask.Item; 66 66 foreach (IOptimizer childOpt in experiment.Optimizers) { 67 this.childHive Jobs.Add(new OptimizerHiveJob(childOpt));67 this.childHiveTasks.Add(new OptimizerHiveTask(childOpt)); 68 68 } 69 } else if (Item Job.Item is Optimization.BatchRun) {70 Optimization.BatchRun batchRun = Item Job.OptimizerAsBatchRun;69 } else if (ItemTask.Item is Optimization.BatchRun) { 70 Optimization.BatchRun batchRun = ItemTask.OptimizerAsBatchRun; 71 71 if (batchRun.Optimizer != null) { 72 while (this.childHive Jobs.Count < batchRun.Repetitions) {73 this.childHive Jobs.Add(new OptimizerHiveJob(batchRun.Optimizer));72 while (this.childHiveTasks.Count < batchRun.Repetitions) { 73 this.childHiveTasks.Add(new OptimizerHiveTask(batchRun.Optimizer)); 74 74 } 75 while (this.childHive Jobs.Count > batchRun.Repetitions) {76 this.childHive Jobs.Remove(this.childHiveJobs.Last());75 while (this.childHiveTasks.Count > batchRun.Repetitions) { 76 this.childHiveTasks.Remove(this.childHiveTasks.Last()); 77 77 } 78 78 } … … 82 82 } 83 83 84 protected override void RegisterItem JobEvents() {85 base.RegisterItem JobEvents();86 if (Item Job!= null) {87 if (Item Job.Item is Optimization.Experiment) {88 Optimization.Experiment experiment = Item Job.OptimizerAsExperiment;84 protected override void RegisterItemTaskEvents() { 85 base.RegisterItemTaskEvents(); 86 if (ItemTask != null) { 87 if (ItemTask.Item is Optimization.Experiment) { 88 Optimization.Experiment experiment = ItemTask.OptimizerAsExperiment; 89 89 experiment.Optimizers.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsAdded); 90 90 experiment.Optimizers.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced); 91 91 experiment.Optimizers.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved); 92 92 experiment.Optimizers.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_CollectionReset); 93 } else if (Item Job.Item is Optimization.BatchRun) {94 Optimization.BatchRun batchRun = Item Job.OptimizerAsBatchRun;93 } else if (ItemTask.Item is Optimization.BatchRun) { 94 Optimization.BatchRun batchRun = ItemTask.OptimizerAsBatchRun; 95 95 batchRun.RepetitionsChanged += new EventHandler(batchRun_RepetitionsChanged); 96 96 batchRun.OptimizerChanged += new EventHandler(batchRun_OptimizerChanged); … … 98 98 } 99 99 } 100 protected override void DergisterItem JobEvents() {101 base.DergisterItem JobEvents();102 if (Item Job!= null) {103 if (Item Job.Item is Optimization.Experiment) {104 Optimization.Experiment experiment = Item Job.OptimizerAsExperiment;100 protected override void DergisterItemTaskEvents() { 101 base.DergisterItemTaskEvents(); 102 if (ItemTask != null) { 103 if (ItemTask.Item is Optimization.Experiment) { 104 Optimization.Experiment experiment = ItemTask.OptimizerAsExperiment; 105 105 experiment.Optimizers.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsAdded); 106 106 experiment.Optimizers.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced); 107 107 experiment.Optimizers.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved); 108 108 experiment.Optimizers.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_CollectionReset); 109 } else if (Item Job.Item is Optimization.BatchRun) {110 Optimization.BatchRun batchRun = Item Job.OptimizerAsBatchRun;109 } else if (ItemTask.Item is Optimization.BatchRun) { 110 Optimization.BatchRun batchRun = ItemTask.OptimizerAsBatchRun; 111 111 batchRun.RepetitionsChanged -= new EventHandler(batchRun_RepetitionsChanged); 112 112 batchRun.OptimizerChanged -= new EventHandler(batchRun_OptimizerChanged); … … 116 116 117 117 private void batchRun_OptimizerChanged(object sender, EventArgs e) { 118 if (sync JobsWithOptimizers) {119 UpdateChildHive Jobs();118 if (syncTasksWithOptimizers) { 119 UpdateChildHiveTasks(); 120 120 } 121 121 } 122 122 123 123 private void batchRun_RepetitionsChanged(object sender, EventArgs e) { 124 if (sync JobsWithOptimizers) {125 UpdateChildHive Jobs();124 if (syncTasksWithOptimizers) { 125 UpdateChildHiveTasks(); 126 126 } 127 127 } 128 128 129 129 private void Optimizers_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) { 130 if (sync JobsWithOptimizers && this.ItemJob.ComputeInParallel) {131 childHive JobsLock.EnterWriteLock();130 if (syncTasksWithOptimizers && this.ItemTask.ComputeInParallel) { 131 childHiveTasksLock.EnterWriteLock(); 132 132 try { 133 133 foreach (var item in e.Items) { 134 134 if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") { 135 this.childHive Jobs.Add(new OptimizerHiveJob(item.Value));135 this.childHiveTasks.Add(new OptimizerHiveTask(item.Value)); 136 136 } 137 137 } 138 138 } 139 finally { childHive JobsLock.ExitWriteLock(); }139 finally { childHiveTasksLock.ExitWriteLock(); } 140 140 } 141 141 } 142 142 private void Optimizers_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) { 143 if (sync JobsWithOptimizers && this.ItemJob.ComputeInParallel) {144 childHive JobsLock.EnterWriteLock();143 if (syncTasksWithOptimizers && this.ItemTask.ComputeInParallel) { 144 childHiveTasksLock.EnterWriteLock(); 145 145 try { 146 146 foreach (var item in e.OldItems) { 147 this.childHive Jobs.Remove(this.GetChildByOptimizer(item.Value));147 this.childHiveTasks.Remove(this.GetChildByOptimizer(item.Value)); 148 148 } 149 149 foreach (var item in e.Items) { 150 150 if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") { 151 this.childHive Jobs.Add(new OptimizerHiveJob(item.Value));151 this.childHiveTasks.Add(new OptimizerHiveTask(item.Value)); 152 152 } 153 153 } 154 154 } 155 finally { childHive JobsLock.ExitWriteLock(); }155 finally { childHiveTasksLock.ExitWriteLock(); } 156 156 } 157 157 } 158 158 private void Optimizers_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) { 159 if (sync JobsWithOptimizers && this.ItemJob.ComputeInParallel) {160 childHive JobsLock.EnterWriteLock();159 if (syncTasksWithOptimizers && this.ItemTask.ComputeInParallel) { 160 childHiveTasksLock.EnterWriteLock(); 161 161 try { 162 162 foreach (var item in e.Items) { 163 this.childHive Jobs.Remove(this.GetChildByOptimizer(item.Value));164 } 165 } 166 finally { childHive JobsLock.ExitWriteLock(); }163 this.childHiveTasks.Remove(this.GetChildByOptimizer(item.Value)); 164 } 165 } 166 finally { childHiveTasksLock.ExitWriteLock(); } 167 167 } 168 168 } 169 169 private void Optimizers_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) { 170 if (sync JobsWithOptimizers && this.ItemJob.ComputeInParallel) {171 childHive JobsLock.EnterWriteLock();170 if (syncTasksWithOptimizers && this.ItemTask.ComputeInParallel) { 171 childHiveTasksLock.EnterWriteLock(); 172 172 try { 173 173 foreach (var item in e.Items) { 174 this.childHive Jobs.Remove(this.GetChildByOptimizer(item.Value));175 } 176 } 177 finally { childHive JobsLock.ExitWriteLock(); }174 this.childHiveTasks.Remove(this.GetChildByOptimizer(item.Value)); 175 } 176 } 177 finally { childHiveTasksLock.ExitWriteLock(); } 178 178 } 179 179 } … … 183 183 /// replace the child-optimizer in the experiment 184 184 /// if this.Optimizer is BatchRun 185 /// add the runs from the optimizer Jobto the batchrun and replace the Optimizer186 /// </summary> 187 public override void IntegrateChild(Item Job job, Guid childJobId) {188 var optimizer Job = (OptimizerJob)job;189 sync JobsWithOptimizers = false; // don't sync with optimizers during this method190 191 if (this.Item Job != null && this.ItemJob.Item != null) {192 if (this.Item Job.Item is Optimization.Experiment) {193 UpdateOptimizerInExperiment(this.Item Job.OptimizerAsExperiment, optimizerJob);194 } else if (this.Item Job.Item is Optimization.BatchRun) {195 UpdateOptimizerInBatchRun(this.Item Job.OptimizerAsBatchRun, optimizerJob);196 } 197 } 198 199 childHive JobsLock.EnterReadLock();200 OptimizerHive Job child = (OptimizerHiveJob)this.ChildHiveJobs.Single(j => j.Job.Id == childJobId);185 /// add the runs from the optimizerTask to the batchrun and replace the Optimizer 186 /// </summary> 187 public override void IntegrateChild(ItemTask task, Guid childJobId) { 188 var optimizerTask = (OptimizerTask)task; 189 syncTasksWithOptimizers = false; // don't sync with optimizers during this method 190 191 if (this.ItemTask != null && this.ItemTask.Item != null) { 192 if (this.ItemTask.Item is Optimization.Experiment) { 193 UpdateOptimizerInExperiment(this.ItemTask.OptimizerAsExperiment, optimizerTask); 194 } else if (this.ItemTask.Item is Optimization.BatchRun) { 195 UpdateOptimizerInBatchRun(this.ItemTask.OptimizerAsBatchRun, optimizerTask); 196 } 197 } 198 199 childHiveTasksLock.EnterReadLock(); 200 OptimizerHiveTask child = (OptimizerHiveTask)this.ChildHiveTasks.Single(j => j.Task.Id == childJobId); 201 201 try { 202 if (!optimizer Job.ComputeInParallel) {203 child.sync JobsWithOptimizers = false;204 child.Item Job = optimizerJob;205 child.sync JobsWithOptimizers = true;206 } 207 } 208 finally { childHive JobsLock.ExitReadLock(); }209 sync JobsWithOptimizers = true;210 } 211 212 /// <summary> 213 /// Adds the runs from the optimizer Jobto the batchrun and replaces the Optimizer214 /// Sideeffect: the optimizer Job.Optimizer will be prepared (scopes are deleted and executionstate will be reset)215 /// </summary> 216 private void UpdateOptimizerInBatchRun(BatchRun batchRun, Optimizer Job optimizerJob) {202 if (!optimizerTask.ComputeInParallel) { 203 child.syncTasksWithOptimizers = false; 204 child.ItemTask = optimizerTask; 205 child.syncTasksWithOptimizers = true; 206 } 207 } 208 finally { childHiveTasksLock.ExitReadLock(); } 209 syncTasksWithOptimizers = true; 210 } 211 212 /// <summary> 213 /// Adds the runs from the optimizerTask to the batchrun and replaces the Optimizer 214 /// Sideeffect: the optimizerTask.Optimizer will be prepared (scopes are deleted and executionstate will be reset) 215 /// </summary> 216 private void UpdateOptimizerInBatchRun(BatchRun batchRun, OptimizerTask optimizerTask) { 217 217 if (batchRun.Optimizer == null) { 218 batchRun.Optimizer = (IOptimizer)optimizer Job.Item; // only set the first optimizer as Optimizer. if every time the Optimizer would be set, the runs would be cleared each time219 } 220 foreach (IRun run in optimizer Job.Item.Runs) {218 batchRun.Optimizer = (IOptimizer)optimizerTask.Item; // only set the first optimizer as Optimizer. if every time the Optimizer would be set, the runs would be cleared each time 219 } 220 foreach (IRun run in optimizerTask.Item.Runs) { 221 221 if (!batchRun.Runs.Contains(run)) { 222 222 run.Name = GetNewRunName(run, batchRun.Runs); … … 228 228 /// <summary> 229 229 /// replace the child-optimizer in the experiment 230 /// Sideeffect: the optimizer Job.Optimizer will be prepared (scopes are deleted and executionstate will be reset)231 /// </summary> 232 private void UpdateOptimizerInExperiment(Optimization.Experiment experiment, Optimizer Job optimizerJob) {233 if (optimizer Job.IndexInParentOptimizerList < 0)230 /// Sideeffect: the optimizerTask.Optimizer will be prepared (scopes are deleted and executionstate will be reset) 231 /// </summary> 232 private void UpdateOptimizerInExperiment(Optimization.Experiment experiment, OptimizerTask optimizerTask) { 233 if (optimizerTask.IndexInParentOptimizerList < 0) 234 234 throw new IndexOutOfRangeException("IndexInParentOptimizerList must be equal or greater than zero! The Task is invalid and the optimizer-tree cannot be reassembled."); 235 235 236 while (experiment.Optimizers.Count < optimizer Job.IndexInParentOptimizerList) {237 experiment.Optimizers.Add(new UserDefinedAlgorithm("Placeholder")); // add dummy-entries to Optimizers so that its possible to insert the optimizer Jobat the correct position238 } 239 if (experiment.Optimizers.Count < optimizer Job.IndexInParentOptimizerList + 1) {240 experiment.Optimizers.Add(optimizer Job.Item);236 while (experiment.Optimizers.Count < optimizerTask.IndexInParentOptimizerList) { 237 experiment.Optimizers.Add(new UserDefinedAlgorithm("Placeholder")); // add dummy-entries to Optimizers so that its possible to insert the optimizerTask at the correct position 238 } 239 if (experiment.Optimizers.Count < optimizerTask.IndexInParentOptimizerList + 1) { 240 experiment.Optimizers.Add(optimizerTask.Item); 241 241 } else { 242 242 // if ComputeInParallel==true, don't replace the optimizer (except it is still a Placeholder) 243 243 // this is because Jobs with ComputeInParallel get submitted to hive with their child-optimizers deleted 244 if (!optimizer Job.ComputeInParallel || experiment.Optimizers[optimizerJob.IndexInParentOptimizerList].Name == "Placeholder") {245 experiment.Optimizers[optimizer Job.IndexInParentOptimizerList] = optimizerJob.Item;244 if (!optimizerTask.ComputeInParallel || experiment.Optimizers[optimizerTask.IndexInParentOptimizerList].Name == "Placeholder") { 245 experiment.Optimizers[optimizerTask.IndexInParentOptimizerList] = optimizerTask.Item; 246 246 } 247 247 } … … 250 250 /// <summary> 251 251 /// Sets the IndexInParentOptimizerList property of the OptimizerJob 252 /// according to the position in the OptimizerList of the parentHive Job.Task252 /// according to the position in the OptimizerList of the parentHiveTask.Task 253 253 /// Recursively updates all the child-jobs as well 254 254 /// </summary> 255 internal void SetIndexInParentOptimizerList(OptimizerHive Job parentHiveJob) {256 if (parentHive Job!= null) {257 if (parentHive Job.ItemJob.Item is Optimization.Experiment) {258 this.Item Job.IndexInParentOptimizerList = parentHiveJob.ItemJob.OptimizerAsExperiment.Optimizers.IndexOf(this.ItemJob.Item);259 } else if (parentHive Job.ItemJob.Item is Optimization.BatchRun) {260 this.Item Job.IndexInParentOptimizerList = 0;255 internal void SetIndexInParentOptimizerList(OptimizerHiveTask parentHiveTask) { 256 if (parentHiveTask != null) { 257 if (parentHiveTask.ItemTask.Item is Optimization.Experiment) { 258 this.ItemTask.IndexInParentOptimizerList = parentHiveTask.ItemTask.OptimizerAsExperiment.Optimizers.IndexOf(this.ItemTask.Item); 259 } else if (parentHiveTask.ItemTask.Item is Optimization.BatchRun) { 260 this.ItemTask.IndexInParentOptimizerList = 0; 261 261 } else { 262 262 throw new NotSupportedException("Only Experiment and BatchRuns are supported"); 263 263 } 264 264 } 265 childHive JobsLock.EnterReadLock();265 childHiveTasksLock.EnterReadLock(); 266 266 try { 267 foreach (OptimizerHive Job child in childHiveJobs) {267 foreach (OptimizerHiveTask child in childHiveTasks) { 268 268 child.SetIndexInParentOptimizerList(this); 269 269 } 270 270 } 271 finally { childHive JobsLock.ExitReadLock(); }272 } 273 274 public override void AddChildHiveJob(Hive JobhiveJob) {271 finally { childHiveTasksLock.ExitReadLock(); } 272 } 273 274 public override void AddChildHiveJob(HiveTask hiveJob) { 275 275 base.AddChildHiveJob(hiveJob); 276 var optimizerHiveJob = (OptimizerHive Job)hiveJob;277 sync JobsWithOptimizers = false;278 if (this.Item Job != null && optimizerHiveJob.ItemJob!= null) {279 // if jobis in state Paused, it has to preserve its ResultCollection, which is cleared when a optimizer is added to an experiment280 Optimizer JoboptimizerJobClone = null;281 if (optimizerHiveJob. Job.State == TaskState.Paused) {282 optimizerJobClone = (Optimizer Job)optimizerHiveJob.ItemJob.Clone();283 } 284 285 if (this.Item Job.Item is Optimization.Experiment) {286 if (!this.Item Job.OptimizerAsExperiment.Optimizers.Contains(optimizerHiveJob.ItemJob.Item)) {287 UpdateOptimizerInExperiment(this.Item Job.OptimizerAsExperiment, optimizerHiveJob.ItemJob);288 } 289 } else if (this.Item Job.Item is Optimization.BatchRun) {290 UpdateOptimizerInBatchRun(this.Item Job.OptimizerAsBatchRun, optimizerHiveJob.ItemJob);291 } 292 293 if (optimizerHiveJob. Job.State == TaskState.Paused) {294 optimizerHiveJob.Item Job= optimizerJobClone;295 } 296 } 297 sync JobsWithOptimizers = true;276 var optimizerHiveJob = (OptimizerHiveTask)hiveJob; 277 syncTasksWithOptimizers = false; 278 if (this.ItemTask != null && optimizerHiveJob.ItemTask != null) { 279 // if task is in state Paused, it has to preserve its ResultCollection, which is cleared when a optimizer is added to an experiment 280 OptimizerTask optimizerJobClone = null; 281 if (optimizerHiveJob.Task.State == TaskState.Paused) { 282 optimizerJobClone = (OptimizerTask)optimizerHiveJob.ItemTask.Clone(); 283 } 284 285 if (this.ItemTask.Item is Optimization.Experiment) { 286 if (!this.ItemTask.OptimizerAsExperiment.Optimizers.Contains(optimizerHiveJob.ItemTask.Item)) { 287 UpdateOptimizerInExperiment(this.ItemTask.OptimizerAsExperiment, optimizerHiveJob.ItemTask); 288 } 289 } else if (this.ItemTask.Item is Optimization.BatchRun) { 290 UpdateOptimizerInBatchRun(this.ItemTask.OptimizerAsBatchRun, optimizerHiveJob.ItemTask); 291 } 292 293 if (optimizerHiveJob.Task.State == TaskState.Paused) { 294 optimizerHiveJob.ItemTask = optimizerJobClone; 295 } 296 } 297 syncTasksWithOptimizers = true; 298 298 } 299 299 … … 302 302 /// </summary> 303 303 /// <param name="withoutChildOptimizers"> 304 /// if true the Child-Optimizers will not be serialized (if the jobcontains an Experiment)304 /// if true the Child-Optimizers will not be serialized (if the task contains an Experiment) 305 305 /// </param> 306 public override TaskData GetAs JobData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) {306 public override TaskData GetAsTaskData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) { 307 307 plugins = new List<IPluginDescription>(); 308 if (this.item Job== null) // || this.jobItem.Optimizer == null308 if (this.itemTask == null) // || this.jobItem.Optimizer == null 309 309 return null; 310 310 311 311 IEnumerable<Type> usedTypes; 312 312 byte[] jobByteArray; 313 if (withoutChildOptimizers && this.Item Job.Item is Optimization.Experiment) {314 Optimizer Job clonedJob = (OptimizerJob)this.ItemJob.Clone(); // use a cloned job, so that the childHiveJob don't get confused313 if (withoutChildOptimizers && this.ItemTask.Item is Optimization.Experiment) { 314 OptimizerTask clonedJob = (OptimizerTask)this.ItemTask.Clone(); // use a cloned task, so that the childHiveJob don't get confused 315 315 clonedJob.OptimizerAsExperiment.Optimizers.Clear(); 316 316 jobByteArray = PersistenceUtil.Serialize(clonedJob, out usedTypes); 317 } else if (withoutChildOptimizers && this.Item Job.Item is Optimization.BatchRun) {318 Optimizer Job clonedJob = (OptimizerJob)this.ItemJob.Clone();317 } else if (withoutChildOptimizers && this.ItemTask.Item is Optimization.BatchRun) { 318 OptimizerTask clonedJob = (OptimizerTask)this.ItemTask.Clone(); 319 319 clonedJob.OptimizerAsBatchRun.Optimizer = null; 320 320 jobByteArray = PersistenceUtil.Serialize(clonedJob, out usedTypes); 321 } else if (this.Item Job.Item is IAlgorithm) {322 ((IAlgorithm)this.Item Job.Item).StoreAlgorithmInEachRun = false; // avoid storing the algorithm in runs to reduce size323 jobByteArray = PersistenceUtil.Serialize(this.Item Job, out usedTypes);321 } else if (this.ItemTask.Item is IAlgorithm) { 322 ((IAlgorithm)this.ItemTask.Item).StoreAlgorithmInEachRun = false; // avoid storing the algorithm in runs to reduce size 323 jobByteArray = PersistenceUtil.Serialize(this.ItemTask, out usedTypes); 324 324 } else { 325 jobByteArray = PersistenceUtil.Serialize(this.Item Job, out usedTypes);326 } 327 328 TaskData jobData = new TaskData() { TaskId = job.Id, Data = jobByteArray };325 jobByteArray = PersistenceUtil.Serialize(this.ItemTask, out usedTypes); 326 } 327 328 TaskData jobData = new TaskData() { TaskId = task.Id, Data = jobByteArray }; 329 329 PluginUtil.CollectDeclaringPlugins(plugins, usedTypes); 330 330 return jobData; 331 331 } 332 332 333 public OptimizerHive Job GetChildByOptimizerJob(OptimizerJoboptimizerJob) {334 childHive JobsLock.EnterReadLock();333 public OptimizerHiveTask GetChildByOptimizerJob(OptimizerTask optimizerJob) { 334 childHiveTasksLock.EnterReadLock(); 335 335 try { 336 foreach (OptimizerHive Job child in childHiveJobs) {337 if (child.Item Job== optimizerJob)336 foreach (OptimizerHiveTask child in childHiveTasks) { 337 if (child.ItemTask == optimizerJob) 338 338 return child; 339 339 } 340 340 return null; 341 341 } 342 finally { childHive JobsLock.ExitReadLock(); }343 } 344 345 public Hive Job<OptimizerJob> GetChildByOptimizer(IOptimizer optimizer) {346 childHive JobsLock.EnterReadLock();342 finally { childHiveTasksLock.ExitReadLock(); } 343 } 344 345 public HiveTask<OptimizerTask> GetChildByOptimizer(IOptimizer optimizer) { 346 childHiveTasksLock.EnterReadLock(); 347 347 try { 348 foreach (OptimizerHive Job child in childHiveJobs) {349 if (child.Item Job.Item == optimizer)348 foreach (OptimizerHiveTask child in childHiveTasks) { 349 if (child.ItemTask.Item == optimizer) 350 350 return child; 351 351 } 352 352 return null; 353 353 } 354 finally { childHive JobsLock.ExitReadLock(); }354 finally { childHiveTasksLock.ExitReadLock(); } 355 355 } 356 356
Note: See TracChangeset
for help on using the changeset viewer.