Beispiel #1
0
        private void UploadJob(RefreshableJob refreshableJob, CancellationToken cancellationToken)
        {
            try {
                refreshableJob.IsProgressing = true;
                refreshableJob.Progress.Start("Connecting to server...");
                IEnumerable <string> resourceNames = ToResourceNameList(refreshableJob.Job.ResourceNames);
                var resourceIds = new List <Guid>();
                foreach (var resourceName in resourceNames)
                {
                    Guid resourceId = HiveServiceLocator.Instance.CallHiveService((s) => s.GetResourceId(resourceName));
                    if (resourceId == Guid.Empty)
                    {
                        throw new ResourceNotFoundException(string.Format("Could not find the resource '{0}'", resourceName));
                    }
                    resourceIds.Add(resourceId);
                }

                foreach (OptimizerHiveTask hiveJob in refreshableJob.HiveTasks.OfType <OptimizerHiveTask>())
                {
                    hiveJob.SetIndexInParentOptimizerList(null);
                }

                // upload Job
                refreshableJob.Progress.Status = "Uploading Job...";
                refreshableJob.Job.Id          = HiveServiceLocator.Instance.CallHiveService((s) => s.AddJob(refreshableJob.Job));
                refreshableJob.Job             = HiveServiceLocator.Instance.CallHiveService((s) => s.GetJob(refreshableJob.Job.Id)); // update owner and permissions
                cancellationToken.ThrowIfCancellationRequested();

                int   totalJobCount = refreshableJob.GetAllHiveTasks().Count();
                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
                cancellationToken.ThrowIfCancellationRequested();

                // upload plugins
                refreshableJob.Progress.Status = "Uploading plugins...";
                this.OnlinePlugins             = HiveServiceLocator.Instance.CallHiveService((s) => s.GetPlugins());
                this.AlreadyUploadedPlugins    = new List <Plugin>();
                Plugin configFilePlugin = HiveServiceLocator.Instance.CallHiveService((s) => UploadConfigurationFile(s, onlinePlugins));
                this.alreadyUploadedPlugins.Add(configFilePlugin);
                cancellationToken.ThrowIfCancellationRequested();

                // upload tasks
                refreshableJob.Progress.Status = "Uploading tasks...";

                var tasks = new List <TS.Task>();
                foreach (HiveTask hiveTask in refreshableJob.HiveTasks)
                {
                    var task = TS.Task.Factory.StartNew((hj) => {
                        UploadTaskWithChildren(refreshableJob.Progress, (HiveTask)hj, null, resourceIds, jobCount, totalJobCount, configFilePlugin.Id, refreshableJob.Job.Id, refreshableJob.Log, cancellationToken);
                    }, hiveTask);
                    task.ContinueWith((x) => refreshableJob.Log.LogException(x.Exception), TaskContinuationOptions.OnlyOnFaulted);
                    tasks.Add(task);
                }
                TS.Task.WaitAll(tasks.ToArray());
            }
            finally {
                refreshableJob.Job.Modified  = false;
                refreshableJob.IsProgressing = false;
                refreshableJob.Progress.Finish();
            }
        }
Beispiel #2
0
 public static void ResumeJob(RefreshableJob refreshableJob)
 {
     HiveServiceLocator.Instance.CallHiveService(service => {
         foreach (HiveTask task in refreshableJob.GetAllHiveTasks())
         {
             if (task.Task.State == TaskState.Paused)
             {
                 service.RestartTask(task.Task.Id);
             }
         }
     });
     refreshableJob.ExecutionState = ExecutionState.Started;
 }
Beispiel #3
0
 public static void StopJob(RefreshableJob refreshableJob)
 {
     HiveServiceLocator.Instance.CallHiveService(service => {
         foreach (HiveTask task in refreshableJob.GetAllHiveTasks())
         {
             if (task.Task.State != TaskState.Finished && task.Task.State != TaskState.Aborted && task.Task.State != TaskState.Failed)
             {
                 service.StopTask(task.Task.Id);
             }
         }
     });
     refreshableJob.ExecutionState = ExecutionState.Stopped;
 }