public HiveTask(ItemTask itemTask, bool autoCreateChildHiveTasks) : this() { this.syncTasksWithOptimizers = autoCreateChildHiveTasks; this.ItemTask = itemTask; this.syncTasksWithOptimizers = true; }
/// <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; }
/// <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); }
protected ItemTask(ItemTask original, Cloner cloner) : base(original, cloner) { this.ComputeInParallel = original.ComputeInParallel; this.Item = cloner.Clone(original.Item); }
public virtual void IntegrateChild(ItemTask task, Guid childTaskId) { }