Пример #1
0
 public HiveTask(ItemTask itemTask, bool autoCreateChildHiveTasks)
     : this()
 {
     this.syncTasksWithOptimizers = autoCreateChildHiveTasks;
     this.ItemTask = itemTask;
     this.syncTasksWithOptimizers = true;
 }
Пример #2
0
        /// <summary>
        /// if this.Optimizer is Experiment
        ///   replace the child-optimizer in the experiment
        /// if this.Optimizer is BatchRun
        ///   add the runs from the optimizerTask to the batchrun and replace the Optimizer
        /// </summary>
        public override void IntegrateChild(ItemTask task, Guid childTaskId)
        {
            var optimizerTask = (OptimizerTask)task;

            syncTasksWithOptimizers = false; // don't sync with optimizers during this method

            if (this.ItemTask != null && this.ItemTask.Item != null)
            {
                if (this.ItemTask.Item is Optimization.Experiment)
                {
                    UpdateOptimizerInExperiment(this.ItemTask.OptimizerAsExperiment, optimizerTask);
                }
                else if (this.ItemTask.Item is Optimization.BatchRun)
                {
                    UpdateOptimizerInBatchRun(this.ItemTask.OptimizerAsBatchRun, optimizerTask);
                }
            }

            IEnumerable <HiveTask> childs = this.ChildHiveTasks.Where(j => j.Task.Id == childTaskId);

            //TODO: in very rare cases childs is empty. This shouldn't be the case and should be further investigated.
            if (childs.Count() > 0)
            {
                OptimizerHiveTask child = childs.First() as OptimizerHiveTask;

                if (child != null && !optimizerTask.ComputeInParallel)
                {
                    child.syncTasksWithOptimizers = false;
                    child.ItemTask = optimizerTask;
                    child.syncTasksWithOptimizers = true;
                }
            }

            syncTasksWithOptimizers = true;
        }
Пример #3
0
        /// <summary>
        /// Creates a TaskData object containing the Task and the IJob-Object as byte[]
        /// </summary>
        /// <param name="withoutChildOptimizers">
        ///   if true the Child-Optimizers will not be serialized (if the task contains an Experiment)
        /// </param>
        public override TaskData GetAsTaskData(bool withoutChildOptimizers, out List <IPluginDescription> plugins)
        {
            if (ItemTask == null)
            {
                plugins = new List <IPluginDescription>();
                return(null);
            }

            IEnumerable <Type> usedTypes;

            byte[] jobByteArray;
            if (withoutChildOptimizers && ItemTask.Item is Optimization.Experiment)
            {
                OptimizerTask clonedJob = (OptimizerTask)ItemTask.Clone(); // use a cloned task, so that the childHiveJob don't get confused
                clonedJob.OptimizerAsExperiment.Optimizers.Clear();
                jobByteArray = PersistenceUtil.Serialize(clonedJob, out usedTypes);
            }
            else if (withoutChildOptimizers && ItemTask.Item is Optimization.BatchRun)
            {
                OptimizerTask clonedJob = (OptimizerTask)ItemTask.Clone();
                clonedJob.OptimizerAsBatchRun.Optimizer = null;
                jobByteArray = PersistenceUtil.Serialize(clonedJob, out usedTypes);
            }
            else if (ItemTask.Item is IAlgorithm)
            {
                ((IAlgorithm)ItemTask.Item).StoreAlgorithmInEachRun = false; // avoid storing the algorithm in runs to reduce size
                jobByteArray = PersistenceUtil.Serialize(ItemTask, out usedTypes);
            }
            else
            {
                jobByteArray = PersistenceUtil.Serialize(ItemTask, out usedTypes);
            }

            TaskData jobData = new TaskData()
            {
                TaskId = task.Id, Data = jobByteArray
            };

            plugins = PluginUtil.GetPluginsForTask(usedTypes, ItemTask);
            return(jobData);
        }
Пример #4
0
 protected ItemTask(ItemTask original, Cloner cloner)
     : base(original, cloner)
 {
     this.ComputeInParallel = original.ComputeInParallel;
     this.Item = cloner.Clone(original.Item);
 }
Пример #5
0
 protected ItemTask(ItemTask original, Cloner cloner)
   : base(original, cloner) {
   this.ComputeInParallel = original.ComputeInParallel;
   this.Item = cloner.Clone(original.Item);
 }
Пример #6
0
 public virtual void IntegrateChild(ItemTask task, Guid childTaskId)
 {
 }