- Timestamp:
- 09/08/11 16:38:28 (13 years ago)
- Location:
- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.3
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.3/HiveEngine.cs
r6723 r6725 73 73 } 74 74 75 // Jobcan't be storable, so RefreshableHiveExperiment can't be stored. But as previous runs are only informative it does not matter (only execution time on hive will be wrong because of that -> Todo)76 private ItemCollection<Refreshable HiveExperiment> hiveExperiments = new ItemCollection<RefreshableHiveExperiment>();77 public ItemCollection<Refreshable HiveExperiment> HiveExperiments {78 get { return hiveExperiments; }79 set { hiveExperiments = value; }75 // Task can't be storable, so RefreshableHiveExperiment can't be stored. But as previous runs are only informative it does not matter (only execution time on hive will be wrong because of that -> Todo) 76 private ItemCollection<RefreshableJob> jobs = new ItemCollection<RefreshableJob>(); 77 public ItemCollection<RefreshableJob> Jobs { 78 get { return jobs; } 79 set { jobs = value; } 80 80 } 81 81 … … 111 111 this.executionTimeOnHive = original.executionTimeOnHive; 112 112 this.IsPrivileged = original.IsPrivileged; 113 // do not clone hiveExperiments - otherwise they would be sent with every job113 // do not clone jobs - otherwise they would be sent with every task 114 114 } 115 115 public override IDeepCloneable Clone(Cloner cloner) { … … 158 158 if (coll.Parallel) { 159 159 try { 160 // clone the parent scope here and reuse it for each operation. otherwise for each jobthe whole scope-tree first needs to be copied and then cleaned, which causes a lot of work for the Garbage Collector160 // clone the parent scope here and reuse it for each operation. otherwise for each task the whole scope-tree first needs to be copied and then cleaned, which causes a lot of work for the Garbage Collector 161 161 IScope parentScopeClone = (IScope)((IAtomicOperation)coll.First()).Scope.Parent.Clone(); 162 162 parentScopeClone.SubScopes.Clear(); 163 163 parentScopeClone.ClearParentScopes(); 164 164 165 Engine Job[] jobs = new EngineJob[coll.Count];165 EngineTask[] jobs = new EngineTask[coll.Count]; 166 166 for (int i = 0; i < coll.Count; i++) { 167 jobs[i] = new Engine Job(coll[i], new SequentialEngine.SequentialEngine());167 jobs[i] = new EngineTask(coll[i], new SequentialEngine.SequentialEngine()); 168 168 } 169 169 170 var experiment = Create HiveExperiment();170 var experiment = CreateJob(); 171 171 IScope[] scopes = ExecuteOnHive(experiment, jobs, parentScopeClone, cancellationToken); 172 172 … … 241 241 /// </summary> 242 242 /// <param name="jobs"></param> 243 private IScope[] ExecuteOnHive(Refreshable HiveExperiment refreshableHiveExperiment, EngineJob[] jobs, IScope parentScopeClone, CancellationToken cancellationToken) {243 private IScope[] ExecuteOnHive(RefreshableJob refreshableJob, EngineTask[] jobs, IScope parentScopeClone, CancellationToken cancellationToken) { 244 244 log.LogMessage(string.Format("Executing {0} operations on the hive.", jobs.Length)); 245 245 IScope[] scopes = new Scope[jobs.Length]; 246 246 object locker = new object(); 247 var hiveExperiment = refreshable HiveExperiment.HiveExperiment;247 var hiveExperiment = refreshableJob.Job; 248 248 249 249 try { 250 250 // create upload-tasks 251 251 for (int i = 0; i < jobs.Length; i++) { 252 var engineHiveJob = new EngineHive Job(jobs[i], parentScopeClone);253 engineHiveJob. Job.Priority = this.Priority;254 refreshable HiveExperiment.HiveJobs.Add(engineHiveJob);252 var engineHiveJob = new EngineHiveTask(jobs[i], parentScopeClone); 253 engineHiveJob.Task.Priority = this.Priority; 254 refreshableJob.HiveJobs.Add(engineHiveJob); 255 255 256 256 // shuffle random variable to avoid the same random sequence in each operation; todo: does not yet work (it cannot find the random variable) … … 259 259 random.Reset(random.Next()); 260 260 } 261 HiveClient.StartExperiment((e) => { log.LogException(e); }, refreshable HiveExperiment, cancellationToken);261 HiveClient.StartExperiment((e) => { log.LogException(e); }, refreshableJob, cancellationToken); 262 262 263 263 // do polling until experiment is finished and all jobs are downloaded 264 while (!refreshable HiveExperiment.AllJobsFinished()) {264 while (!refreshableJob.AllJobsFinished()) { 265 265 Thread.Sleep(2000); 266 this.ExecutionTimeOnHive = TimeSpan.FromMilliseconds( hiveExperiments.Sum(x => x.ExecutionTime.TotalMilliseconds));266 this.ExecutionTimeOnHive = TimeSpan.FromMilliseconds(jobs.Sum(x => x.ExecutionTime.TotalMilliseconds)); 267 267 cancellationToken.ThrowIfCancellationRequested(); 268 268 } 269 log.LogMessage(string.Format("{0} finished (TotalExecutionTime: {1}).", refreshable HiveExperiment.ToString(), refreshableHiveExperiment.ExecutionTime));270 271 var failedJobs = refreshable HiveExperiment.HiveJobs.Where(x => x.Job.State == TaskState.Failed);269 log.LogMessage(string.Format("{0} finished (TotalExecutionTime: {1}).", refreshableJob.ToString(), refreshableJob.ExecutionTime)); 270 271 var failedJobs = refreshableJob.HiveJobs.Where(x => x.Task.State == TaskState.Failed); 272 272 if (failedJobs.Count() > 0) { 273 throw new HiveEngineException("Task failed: " + failedJobs.First(). Job.StateLog.Last().Exception);273 throw new HiveEngineException("Task failed: " + failedJobs.First().Task.StateLog.Last().Exception); 274 274 } 275 275 276 276 // get scopes 277 277 int j = 0; 278 foreach (var hiveJob in refreshable HiveExperiment.HiveJobs) {279 var scope = ((IAtomicOperation)((Engine Job)hiveJob.ItemJob).InitialOperation).Scope;278 foreach (var hiveJob in refreshableJob.HiveJobs) { 279 var scope = ((IAtomicOperation)((EngineTask)hiveJob.ItemTask).InitialOperation).Scope; 280 280 scopes[j++] = scope; 281 281 } … … 290 290 } 291 291 finally { 292 Dispose HiveExperiment(refreshableHiveExperiment);293 } 294 } 295 296 private Refreshable HiveExperiment CreateHiveExperiment() {292 DisposeJob(refreshableJob); 293 } 294 } 295 296 private RefreshableJob CreateJob() { 297 297 lock (locker) { 298 298 var hiveExperiment = new Job(); 299 hiveExperiment.Name = "HiveEngine Run " + hiveExperiments.Count;299 hiveExperiment.Name = "HiveEngine Run " + jobs.Count; 300 300 hiveExperiment.DateCreated = DateTime.Now; 301 301 hiveExperiment.ResourceNames = this.ResourceNames; 302 302 hiveExperiment.IsPrivileged = this.IsPrivileged; 303 var refreshableHiveExperiment = new Refreshable HiveExperiment(hiveExperiment);303 var refreshableHiveExperiment = new RefreshableJob(hiveExperiment); 304 304 refreshableHiveExperiment.IsDownloadable = false; // download happens automatically so disable button 305 hiveExperiments.Add(refreshableHiveExperiment);305 jobs.Add(refreshableHiveExperiment); 306 306 return refreshableHiveExperiment; 307 307 } 308 308 } 309 309 310 private void Dispose HiveExperiment(RefreshableHiveExperiment refreshableHiveExperiment) {311 refreshable HiveExperiment.RefreshAutomatically = false;312 DeleteHiveExperiment(refreshable HiveExperiment.HiveExperiment.Id);313 ClearData(refreshable HiveExperiment);314 } 315 316 private void ClearData(Refreshable HiveExperiment refreshableHiveExperiment) {317 var jobs = refreshable HiveExperiment.GetAllHiveJobs();310 private void DisposeJob(RefreshableJob refreshableJob) { 311 refreshableJob.RefreshAutomatically = false; 312 DeleteHiveExperiment(refreshableJob.Job.Id); 313 ClearData(refreshableJob); 314 } 315 316 private void ClearData(RefreshableJob refreshableJob) { 317 var jobs = refreshableJob.GetAllHiveJobs(); 318 318 foreach (var job in jobs) { 319 319 job.ClearData(); -
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.3/Tests/Program.cs
r6381 r6725 33 33 ContentManager.Initialize(new PersistenceContentManager()); 34 34 35 Optimizer Job job = new OptimizerJob(new Experiment());35 OptimizerTask job = new OptimizerTask(new Experiment()); 36 36 job.IndexInParentOptimizerList = 15; 37 37 38 //byte[] data = PersistenceUtil.Serialize( job);38 //byte[] data = PersistenceUtil.Serialize(task); 39 39 40 40 //var job2 = PersistenceUtil.Deserialize<OptimizerJob>(data); … … 66 66 Console.WriteLine("Log:"); 67 67 Console.WriteLine(string.Join(Environment.NewLine, alg.Engine.Log.Messages.ToArray())); 68 var exps = ((HiveEngine)alg.Engine). HiveExperiments;68 var exps = ((HiveEngine)alg.Engine).Jobs; 69 69 foreach (var exp in exps) { 70 70 Console.WriteLine("# " + exp.ToString());
Note: See TracChangeset
for help on using the changeset viewer.