Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/10/11 17:58:59 (13 years ago)
Author:
cneumuel
Message:

#1233

  • added semaphores to ensure an appdomain is never unloaded when the start method has not finished
  • HiveEngine uploading and downloading of jobs works and is displayed in the view
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/OptimizerHiveJob.cs

    r6111 r6178  
    3737    public OptimizerHiveJob(IOptimizer optimizer)
    3838      : this() {
    39       this.JobItem = new OptimizerJob(optimizer);
     39      this.ItemJob = new OptimizerJob(optimizer);
    4040    }
    4141    public OptimizerHiveJob(OptimizerJob optimizerJob)
    4242      : this() {
    43       this.JobItem = optimizerJob;
     43      this.ItemJob = optimizerJob;
    4444    }
    4545    protected OptimizerHiveJob(OptimizerHiveJob original, Cloner cloner)
     
    6060      base.UpdateChildHiveJobs();
    6161      if (Job != null && syncJobsWithOptimizers) {
    62         if (!JobItem.ComputeInParallel) {
     62        if (!ItemJob.ComputeInParallel) {
    6363          this.childHiveJobs.Clear();
    6464        } else {
    65           if (JobItem.Item is Optimization.Experiment) {
    66             Optimization.Experiment experiment = (Optimization.Experiment)JobItem.Item;
     65          if (ItemJob.Item is Optimization.Experiment) {
     66            Optimization.Experiment experiment = (Optimization.Experiment)ItemJob.Item;
    6767            foreach (IOptimizer childOpt in experiment.Optimizers) {
    6868              this.childHiveJobs.Add(new OptimizerHiveJob(childOpt));
    6969            }
    70           } else if (JobItem.Item is Optimization.BatchRun) {
    71             Optimization.BatchRun batchRun = JobItem.OptimizerAsBatchRun;
     70          } else if (ItemJob.Item is Optimization.BatchRun) {
     71            Optimization.BatchRun batchRun = ItemJob.OptimizerAsBatchRun;
    7272            if (batchRun.Optimizer != null) {
    7373              while (this.childHiveJobs.Count < batchRun.Repetitions) {
     
    8383    }
    8484
    85     protected override void RegisterJobItemEvents() {
    86       base.RegisterJobItemEvents();
    87       if (JobItem != null) {
    88         if (JobItem.Item is Optimization.Experiment) {
    89           Optimization.Experiment experiment = JobItem.OptimizerAsExperiment;
     85    protected override void RegisterItemJobEvents() {
     86      base.RegisterItemJobEvents();
     87      if (ItemJob != null) {
     88        if (ItemJob.Item is Optimization.Experiment) {
     89          Optimization.Experiment experiment = ItemJob.OptimizerAsExperiment;
    9090          experiment.Optimizers.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsAdded);
    9191          experiment.Optimizers.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced);
    9292          experiment.Optimizers.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved);
    9393          experiment.Optimizers.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_CollectionReset);
    94         } else if (JobItem.Item is Optimization.BatchRun) {
    95           Optimization.BatchRun batchRun = JobItem.OptimizerAsBatchRun;
     94        } else if (ItemJob.Item is Optimization.BatchRun) {
     95          Optimization.BatchRun batchRun = ItemJob.OptimizerAsBatchRun;
    9696          batchRun.RepetitionsChanged += new EventHandler(batchRun_RepetitionsChanged);
    9797          batchRun.OptimizerChanged += new EventHandler(batchRun_OptimizerChanged);
     
    9999      }
    100100    }
    101     protected override void DergisterJobItemsEvents() {
    102       base.DergisterJobItemsEvents();
    103       if (JobItem != null) {
    104         if (JobItem.Item is Optimization.Experiment) {
    105           Optimization.Experiment experiment = JobItem.OptimizerAsExperiment;
     101    protected override void DergisterItemJobEvents() {
     102      base.DergisterItemJobEvents();
     103      if (ItemJob != null) {
     104        if (ItemJob.Item is Optimization.Experiment) {
     105          Optimization.Experiment experiment = ItemJob.OptimizerAsExperiment;
    106106          experiment.Optimizers.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsAdded);
    107107          experiment.Optimizers.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced);
    108108          experiment.Optimizers.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved);
    109109          experiment.Optimizers.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_CollectionReset);
    110         } else if (JobItem.Item is Optimization.BatchRun) {
    111           Optimization.BatchRun batchRun = JobItem.OptimizerAsBatchRun;
     110        } else if (ItemJob.Item is Optimization.BatchRun) {
     111          Optimization.BatchRun batchRun = ItemJob.OptimizerAsBatchRun;
    112112          batchRun.RepetitionsChanged -= new EventHandler(batchRun_RepetitionsChanged);
    113113          batchRun.OptimizerChanged -= new EventHandler(batchRun_OptimizerChanged);
     
    129129
    130130    private void Optimizers_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
    131       if (syncJobsWithOptimizers && this.JobItem.ComputeInParallel) {
     131      if (syncJobsWithOptimizers && this.ItemJob.ComputeInParallel) {
    132132        foreach (var item in e.Items) {
    133133          if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") {
     
    138138    }
    139139    private void Optimizers_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
    140       if (syncJobsWithOptimizers && this.JobItem.ComputeInParallel) {
     140      if (syncJobsWithOptimizers && this.ItemJob.ComputeInParallel) {
    141141        foreach (var item in e.OldItems) {
    142142          this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value));
     
    150150    }
    151151    private void Optimizers_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
    152       if (syncJobsWithOptimizers && this.JobItem.ComputeInParallel) {
     152      if (syncJobsWithOptimizers && this.ItemJob.ComputeInParallel) {
    153153        foreach (var item in e.Items) {
    154154          this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value));
     
    157157    }
    158158    private void Optimizers_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
    159       if (syncJobsWithOptimizers && this.JobItem.ComputeInParallel) {
     159      if (syncJobsWithOptimizers && this.ItemJob.ComputeInParallel) {
    160160        foreach (var item in e.Items) {
    161161          this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value));
     
    174174      syncJobsWithOptimizers = false; // don't sync with optimizers during this method
    175175
    176       if (this.JobItem != null && this.JobItem.Item != null) {
    177         if (this.JobItem.Item is Optimization.Experiment) {
    178           UpdateOptimizerInExperiment(this.JobItem.OptimizerAsExperiment, optimizerJob);
    179         } else if (this.JobItem.Item is Optimization.BatchRun) {
    180           UpdateOptimizerInBatchRun(this.JobItem.OptimizerAsBatchRun, optimizerJob);
     176      if (this.ItemJob != null && this.ItemJob.Item != null) {
     177        if (this.ItemJob.Item is Optimization.Experiment) {
     178          UpdateOptimizerInExperiment(this.ItemJob.OptimizerAsExperiment, optimizerJob);
     179        } else if (this.ItemJob.Item is Optimization.BatchRun) {
     180          UpdateOptimizerInBatchRun(this.ItemJob.OptimizerAsBatchRun, optimizerJob);
    181181        }
    182182      }
     
    185185      if (!optimizerJob.ComputeInParallel) {
    186186        child.syncJobsWithOptimizers = false;
    187         child.JobItem = optimizerJob;
     187        child.ItemJob = optimizerJob;
    188188        child.syncJobsWithOptimizers = true;
    189189      }
     
    236236    internal void SetIndexInParentOptimizerList(OptimizerHiveJob parentHiveJob) {
    237237      if (parentHiveJob != null) {
    238         if (parentHiveJob.JobItem.Item is Optimization.Experiment) {
    239           this.JobItem.IndexInParentOptimizerList = parentHiveJob.JobItem.OptimizerAsExperiment.Optimizers.IndexOf(this.JobItem.Item);
    240         } else if (parentHiveJob.JobItem.Item is Optimization.BatchRun) {
    241           this.JobItem.IndexInParentOptimizerList = 0;
     238        if (parentHiveJob.ItemJob.Item is Optimization.Experiment) {
     239          this.ItemJob.IndexInParentOptimizerList = parentHiveJob.ItemJob.OptimizerAsExperiment.Optimizers.IndexOf(this.ItemJob.Item);
     240        } else if (parentHiveJob.ItemJob.Item is Optimization.BatchRun) {
     241          this.ItemJob.IndexInParentOptimizerList = 0;
    242242        } else {
    243243          throw new NotSupportedException("Only Experiment and BatchRuns are supported");
     
    253253      var optimizerHiveJob = (OptimizerHiveJob)hiveJob;
    254254      syncJobsWithOptimizers = false;
    255       if (this.JobItem != null && optimizerHiveJob.JobItem != null) {
     255      if (this.ItemJob != null && optimizerHiveJob.ItemJob != null) {
    256256        // if job is in state Paused, it has to preserve its ResultCollection, which is cleared when a optimizer is added to an experiment
    257257        OptimizerJob optimizerJobClone = null;
    258258        if (optimizerHiveJob.Job.State == JobState.Paused) {
    259           optimizerJobClone = (OptimizerJob)optimizerHiveJob.JobItem.Clone();
    260         }
    261 
    262         if (this.JobItem.Item is Optimization.Experiment) {
    263           if (!this.JobItem.OptimizerAsExperiment.Optimizers.Contains(optimizerHiveJob.JobItem.Item)) {
    264             UpdateOptimizerInExperiment(this.JobItem.OptimizerAsExperiment, optimizerHiveJob.JobItem);
     259          optimizerJobClone = (OptimizerJob)optimizerHiveJob.ItemJob.Clone();
     260        }
     261
     262        if (this.ItemJob.Item is Optimization.Experiment) {
     263          if (!this.ItemJob.OptimizerAsExperiment.Optimizers.Contains(optimizerHiveJob.ItemJob.Item)) {
     264            UpdateOptimizerInExperiment(this.ItemJob.OptimizerAsExperiment, optimizerHiveJob.ItemJob);
    265265          }
    266         } else if (this.JobItem.Item is Optimization.BatchRun) {
    267           UpdateOptimizerInBatchRun(this.JobItem.OptimizerAsBatchRun, optimizerHiveJob.JobItem);
     266        } else if (this.ItemJob.Item is Optimization.BatchRun) {
     267          UpdateOptimizerInBatchRun(this.ItemJob.OptimizerAsBatchRun, optimizerHiveJob.ItemJob);
    268268        }
    269269
    270270        if (optimizerHiveJob.Job.State == JobState.Paused) {
    271           optimizerHiveJob.JobItem = optimizerJobClone;
     271          optimizerHiveJob.ItemJob = optimizerJobClone;
    272272        }
    273273      }
     
    283283    public override JobData GetAsJobData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) {
    284284      plugins = new List<IPluginDescription>();
    285       if (this.jobItem == null) // || this.jobItem.Optimizer == null
     285      if (this.itemJob == null) // || this.jobItem.Optimizer == null
    286286        return null;
    287287
    288288      IEnumerable<Type> usedTypes;
    289289      byte[] jobByteArray;
    290       if (withoutChildOptimizers && this.JobItem.Item is Optimization.Experiment) {
    291         OptimizerJob clonedJob = (OptimizerJob)this.JobItem.Clone(); // use a cloned job, so that the childHiveJob don't get confused
     290      if (withoutChildOptimizers && this.ItemJob.Item is Optimization.Experiment) {
     291        OptimizerJob clonedJob = (OptimizerJob)this.ItemJob.Clone(); // use a cloned job, so that the childHiveJob don't get confused
    292292        clonedJob.OptimizerAsExperiment.Optimizers.Clear();
    293293        jobByteArray = PersistenceUtil.Serialize(clonedJob, out usedTypes);
    294       } else if (withoutChildOptimizers && this.JobItem.Item is Optimization.BatchRun) {
    295         OptimizerJob clonedJob = (OptimizerJob)this.JobItem.Clone();
     294      } else if (withoutChildOptimizers && this.ItemJob.Item is Optimization.BatchRun) {
     295        OptimizerJob clonedJob = (OptimizerJob)this.ItemJob.Clone();
    296296        clonedJob.OptimizerAsBatchRun.Optimizer = null;
    297297        jobByteArray = PersistenceUtil.Serialize(clonedJob, out usedTypes);
    298       } else if (this.JobItem.Item is IAlgorithm) {
    299         ((IAlgorithm)this.JobItem.Item).StoreAlgorithmInEachRun = false; // avoid storing the algorithm in runs to reduce size
    300         jobByteArray = PersistenceUtil.Serialize(this.JobItem, out usedTypes);
     298      } else if (this.ItemJob.Item is IAlgorithm) {
     299        ((IAlgorithm)this.ItemJob.Item).StoreAlgorithmInEachRun = false; // avoid storing the algorithm in runs to reduce size
     300        jobByteArray = PersistenceUtil.Serialize(this.ItemJob, out usedTypes);
    301301      } else {
    302         jobByteArray = PersistenceUtil.Serialize(this.JobItem, out usedTypes);
     302        jobByteArray = PersistenceUtil.Serialize(this.ItemJob, out usedTypes);
    303303      }
    304304
     
    315315    public OptimizerHiveJob GetChildByOptimizerJob(OptimizerJob optimizerJob) {
    316316      foreach (OptimizerHiveJob child in ChildHiveJobs) {
    317         if (child.JobItem == optimizerJob)
     317        if (child.ItemJob == optimizerJob)
    318318          return child;
    319319      }
     
    323323    public HiveJob<OptimizerJob> GetChildByOptimizer(IOptimizer optimizer) {
    324324      foreach (OptimizerHiveJob child in ChildHiveJobs) {
    325         if (child.JobItem.Item == optimizer)
     325        if (child.ItemJob.Item == optimizer)
    326326          return child;
    327327      }
Note: See TracChangeset for help on using the changeset viewer.