Changeset 6479 for branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveClient.cs
- Timestamp:
- 06/27/11 15:20:23 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveClient.cs
r6463 r6479 66 66 set { alreadyUploadedPlugins = value; } 67 67 } 68 69 private bool isAllowedPrivileged; 70 public bool IsAllowedPrivileged { 71 get { return isAllowedPrivileged; } 72 set { isAllowedPrivileged = value; } 73 } 68 74 #endregion 69 75 … … 75 81 76 82 try { 83 this.IsAllowedPrivileged = ServiceLocator.Instance.CallHiveService((s) => s.IsAllowedPrivileged()); 84 85 var oldExperiments = hiveExperiments ?? new ItemCollection<RefreshableHiveExperiment>(); 77 86 hiveExperiments = new HiveItemCollection<RefreshableHiveExperiment>(); 78 var he = ServiceLocator.Instance.CallHiveService<IEnumerable<HiveExperiment>>(s => s.GetHiveExperiments()); 79 hiveExperiments.AddRange(he.Select(x => new RefreshableHiveExperiment(x)).OrderBy(x => x.HiveExperiment.Name)); 87 var experimentsLoaded = ServiceLocator.Instance.CallHiveService<IEnumerable<HiveExperiment>>(s => s.GetHiveExperiments()); 88 89 foreach (var he in experimentsLoaded) { 90 var hiveExperiment = oldExperiments.SingleOrDefault(x => x.Id == he.Id); 91 if (hiveExperiment == null) { 92 // new 93 hiveExperiments.Add(new RefreshableHiveExperiment(he) { IsAllowedPrivileged = this.isAllowedPrivileged }); 94 } else { 95 // update 96 hiveExperiment.HiveExperiment = he; 97 hiveExperiment.IsAllowedPrivileged = this.isAllowedPrivileged; 98 hiveExperiments.Add(hiveExperiment); 99 } 100 } 101 // remove those which were not in the list of loaded hiveexperiments 102 foreach (var experiment in oldExperiments) { 103 if (experiment.Id == Guid.Empty) { 104 // experiment not uploaded... keep 105 hiveExperiments.Add(experiment); 106 } else { 107 experiment.RefreshAutomatically = false; // stop results polling 108 } 109 } 80 110 } 81 111 catch { … … 175 205 HiveClient.StoreAsync( 176 206 new Action<Exception>((Exception ex) => { 177 refreshableHiveExperiment. HiveExperiment.ExecutionState = ExecutionState.Prepared;207 refreshableHiveExperiment.ExecutionState = ExecutionState.Prepared; 178 208 exceptionCallback(ex); 179 209 }), refreshableHiveExperiment, cancellationToken); 180 refreshableHiveExperiment. HiveExperiment.ExecutionState = ExecutionState.Started;181 } 182 183 public static void PauseExperiment( HiveExperiment hiveExperiment) {210 refreshableHiveExperiment.ExecutionState = ExecutionState.Started; 211 } 212 213 public static void PauseExperiment(RefreshableHiveExperiment refreshableHiveExperiment) { 184 214 ServiceLocator.Instance.CallHiveService(service => { 185 foreach (HiveJob job in hiveExperiment.GetAllHiveJobs()) {215 foreach (HiveJob job in refreshableHiveExperiment.GetAllHiveJobs()) { 186 216 if (job.Job.State != JobState.Finished && job.Job.State != JobState.Aborted && job.Job.State != JobState.Failed) 187 217 service.PauseJob(job.Job.Id); 188 218 } 189 219 }); 190 hiveExperiment.ExecutionState = ExecutionState.Paused;191 } 192 193 public static void StopExperiment( HiveExperiment hiveExperiment) {220 refreshableHiveExperiment.ExecutionState = ExecutionState.Paused; 221 } 222 223 public static void StopExperiment(RefreshableHiveExperiment refreshableHiveExperiment) { 194 224 ServiceLocator.Instance.CallHiveService(service => { 195 foreach (HiveJob job in hiveExperiment.GetAllHiveJobs()) {225 foreach (HiveJob job in refreshableHiveExperiment.GetAllHiveJobs()) { 196 226 if (job.Job.State != JobState.Finished && job.Job.State != JobState.Aborted && job.Job.State != JobState.Failed) 197 227 service.StopJob(job.Job.Id); … … 207 237 private void UploadExperiment(RefreshableHiveExperiment refreshableHiveExperiment, CancellationToken cancellationToken) { 208 238 try { 209 refreshableHiveExperiment. HiveExperiment.Progress = new Progress("Connecting to server...");210 refreshableHiveExperiment. HiveExperiment.IsProgressing = true;239 refreshableHiveExperiment.Progress = new Progress("Connecting to server..."); 240 refreshableHiveExperiment.IsProgressing = true; 211 241 212 242 IEnumerable<string> resourceNames = ToResourceNameList(refreshableHiveExperiment.HiveExperiment.ResourceNames); … … 220 250 } 221 251 222 foreach (OptimizerHiveJob hiveJob in refreshableHiveExperiment.Hive Experiment.HiveJobs.OfType<OptimizerHiveJob>()) {252 foreach (OptimizerHiveJob hiveJob in refreshableHiveExperiment.HiveJobs.OfType<OptimizerHiveJob>()) { 223 253 hiveJob.SetIndexInParentOptimizerList(null); 224 254 } 225 255 226 256 // upload HiveExperiment 227 refreshableHiveExperiment. HiveExperiment.Progress.Status = "Uploading HiveExperiment...";257 refreshableHiveExperiment.Progress.Status = "Uploading HiveExperiment..."; 228 258 refreshableHiveExperiment.HiveExperiment.Id = ServiceLocator.Instance.CallHiveService((s) => s.AddHiveExperiment(refreshableHiveExperiment.HiveExperiment)); 229 cancellationToken.ThrowIfCancellationRequested(); 230 231 int totalJobCount = refreshableHiveExperiment.HiveExperiment.GetAllHiveJobs().Count(); 259 refreshableHiveExperiment.HiveExperiment = ServiceLocator.Instance.CallHiveService((s) => s.GetHiveExperiment(refreshableHiveExperiment.HiveExperiment.Id)); // update owner and permissions 260 cancellationToken.ThrowIfCancellationRequested(); 261 262 int totalJobCount = refreshableHiveExperiment.GetAllHiveJobs().Count(); 232 263 int[] jobCount = new int[1]; // use a reference type (int-array) instead of value type (int) in order to pass the value via a delegate to task-parallel-library 233 264 cancellationToken.ThrowIfCancellationRequested(); 234 265 235 266 // upload plugins 236 refreshableHiveExperiment. HiveExperiment.Progress.Status = "Uploading plugins...";267 refreshableHiveExperiment.Progress.Status = "Uploading plugins..."; 237 268 this.OnlinePlugins = ServiceLocator.Instance.CallHiveService((s) => s.GetPlugins()); 238 269 this.AlreadyUploadedPlugins = new List<Plugin>(); … … 244 275 245 276 // upload jobs 246 refreshableHiveExperiment. HiveExperiment.Progress.Status = "Uploading jobs...";277 refreshableHiveExperiment.Progress.Status = "Uploading jobs..."; 247 278 248 279 var tasks = new List<Task>(); 249 foreach (HiveJob hiveJob in refreshableHiveExperiment.Hive Experiment.HiveJobs) {280 foreach (HiveJob hiveJob in refreshableHiveExperiment.HiveJobs) { 250 281 tasks.Add(Task.Factory.StartNew((hj) => { 251 UploadJobWithChildren(refreshableHiveExperiment. HiveExperiment.Progress, (HiveJob)hj, null, resourceIds, jobCount, totalJobCount, configFilePlugin.Id, refreshableHiveExperiment.HiveExperiment.Id, refreshableHiveExperiment.Log, refreshableHiveExperiment.HiveExperiment.IsPrivileged, cancellationToken);282 UploadJobWithChildren(refreshableHiveExperiment.Progress, (HiveJob)hj, null, resourceIds, jobCount, totalJobCount, configFilePlugin.Id, refreshableHiveExperiment.HiveExperiment.Id, refreshableHiveExperiment.Log, refreshableHiveExperiment.HiveExperiment.IsPrivileged, cancellationToken); 252 283 }, hiveJob) 253 284 .ContinueWith((x) => refreshableHiveExperiment.Log.LogException(x.Exception), TaskContinuationOptions.OnlyOnFaulted)); … … 259 290 if (!ae.InnerExceptions.All(e => e is TaskCanceledException)) throw ae; // for some reason the WaitAll throws a AggregateException containg a TaskCanceledException. i don't know where it comes from, however the tasks all finish properly, so for now just ignore it 260 291 } 292 refreshableHiveExperiment.HiveExperiment.Modified = false; 261 293 } 262 294 finally { 263 refreshableHiveExperiment. HiveExperiment.IsProgressing = false;295 refreshableHiveExperiment.IsProgressing = false; 264 296 } 265 297 } … … 364 396 } 365 397 finally { 366 if (!semaphoreReleased) jobUploadSemaphore.Release();398 if (!semaphoreReleased) jobUploadSemaphore.Release(); 367 399 } 368 400 } … … 370 402 371 403 #region Download Experiment 372 public static void LoadExperiment(HiveExperiment hiveExperiment) { 373 hiveExperiment.Progress = new Progress(); 404 public static void LoadExperiment(RefreshableHiveExperiment refreshableHiveExperiment) { 405 var hiveExperiment = refreshableHiveExperiment.HiveExperiment; 406 refreshableHiveExperiment.Progress = new Progress(); 407 374 408 try { 375 hiveExperiment.IsProgressing = true;409 refreshableHiveExperiment.IsProgressing = true; 376 410 int totalJobCount = 0; 377 411 IEnumerable<LightweightJob> allJobs; 378 412 379 hiveExperiment.Progress.Status = "Connecting to Server...";413 refreshableHiveExperiment.Progress.Status = "Connecting to Server..."; 380 414 // fetch all Job objects to create the full tree of tree of HiveJob objects 381 hiveExperiment.Progress.Status = "Downloading list of jobs...";415 refreshableHiveExperiment.Progress.Status = "Downloading list of jobs..."; 382 416 allJobs = ServiceLocator.Instance.CallHiveService(s => s.GetLightweightExperimentJobs(hiveExperiment.Id)); 383 417 totalJobCount = allJobs.Count(); … … 387 421 388 422 while (!downloader.IsFinished) { 389 hiveExperiment.Progress.ProgressValue = downloader.FinishedCount / (double)totalJobCount;390 hiveExperiment.Progress.Status = string.Format("Downloading/deserializing jobs... ({0}/{1} finished)", downloader.FinishedCount, totalJobCount);423 refreshableHiveExperiment.Progress.ProgressValue = downloader.FinishedCount / (double)totalJobCount; 424 refreshableHiveExperiment.Progress.Status = string.Format("Downloading/deserializing jobs... ({0}/{1} finished)", downloader.FinishedCount, totalJobCount); 391 425 Thread.Sleep(500); 392 426 … … 397 431 IDictionary<Guid, HiveJob> allHiveJobs = downloader.Results; 398 432 399 hiveExperiment.HiveJobs = new ItemCollection<HiveJob>(allHiveJobs.Values.Where(x => !x.Job.ParentJobId.HasValue));400 401 if ( hiveExperiment.IsFinished()) {402 hiveExperiment.ExecutionState = Core.ExecutionState.Stopped;433 refreshableHiveExperiment.HiveJobs = new ItemCollection<HiveJob>(allHiveJobs.Values.Where(x => !x.Job.ParentJobId.HasValue)); 434 435 if (refreshableHiveExperiment.IsFinished()) { 436 refreshableHiveExperiment.ExecutionState = Core.ExecutionState.Stopped; 403 437 } else { 404 hiveExperiment.ExecutionState = Core.ExecutionState.Started;438 refreshableHiveExperiment.ExecutionState = Core.ExecutionState.Started; 405 439 } 406 440 407 441 // build child-job tree 408 foreach (HiveJob hiveJob in hiveExperiment.HiveJobs) {442 foreach (HiveJob hiveJob in refreshableHiveExperiment.HiveJobs) { 409 443 BuildHiveJobTree(hiveJob, allJobs, allHiveJobs); 410 444 } 411 445 412 hiveExperiment.OnLoaded();446 refreshableHiveExperiment.OnLoaded(); 413 447 } 414 448 finally { 415 hiveExperiment.IsProgressing = false;449 refreshableHiveExperiment.IsProgressing = false; 416 450 } 417 451 }
Note: See TracChangeset
for help on using the changeset viewer.