/// <summary> /// GetFailedAndCanceledTasks /// </summary> /// <param name="scheduler">scheduler</param> /// <param name="job">job</param> /// <returns>ISchedulerTask</returns> public static List <ISchedulerTask> GetFailedAndCanceledTasks(IScheduler scheduler, ISchedulerJob job) { IFilterCollection filters = scheduler.CreateFilterCollection(); filters.Add(FilterOperator.Equal, PropId.Task_State, TaskState.Failed); var failedTasks = job.GetTaskList(filters, null, true).Cast <ISchedulerTask>().ToList(); filters = scheduler.CreateFilterCollection(); filters.Add(FilterOperator.Equal, PropId.Task_State, TaskState.Canceled); var canceledTasks = job.GetTaskList(filters, null, true).Cast <ISchedulerTask>().ToList(); return(failedTasks.Append(canceledTasks).ToList()); }
public TaskListViewModel(ISchedulerJob job, IEnumerable <VM> activeVMList, Scheduler hpcSched, CompositeCommand _CancelTaskListCommand, CompositeCommand _RequeueTaskListCommand) : base() { TaskList = new ObservableCollection <TaskViewModel>(); SelectAllCommand = new CompositeCommand(); UnselectAllCommand = new CompositeCommand(); CancelTaskListCommand = _CancelTaskListCommand; this.RequeueTaskListCommand = _RequeueTaskListCommand; //IEnumerable<VM> activeVMList = VMModel.GetInstance().ActiveVMList; try { //scheduler.Connect(JobListViewModel.MainNodeName); job.Refresh(); ISchedulerCollection tasks = job.GetTaskList(null, null, true); var query = from ISchedulerTask task in tasks where activeVMList.Any(j => task.AllocatedNodes.Contains(j.GetDomainName())) select task; foreach (ISchedulerTask task in query) { TaskList.Add(new TaskViewModel(task, job, this)); } } catch (Exception ex) { } //foreach (ISchedulerTask task in job.GetTaskList(null, null, true)) //{ // TaskList.Add(new TaskViewModel(task, job)); //} }
private List <ISchedulerTask> GetFailedTasks(ISchedulerJob job) { IFilterCollection filters = _scheduler.CreateFilterCollection(); filters.Add(FilterOperator.Equal, PropId.Task_State, TaskState.Failed); var failedTasks = job.GetTaskList(filters, null, true).Cast <ISchedulerTask>().ToList(); return(failedTasks); }
static ISchedulerCollection getTasksFilterByEndTime(ISchedulerJob job) { ISchedulerCollection tasks; IFilterCollection filters = scheduler.CreateFilterCollection(); filters.Add(FilterOperator.GreaterThanOrEqual, PropId.Task_EndTime, iterationStartTime); tasks = job.GetTaskList(filters, null, true); return(tasks); }
private static ISchedulerTask AddCleanupTaskToJob(ClusterSubmitterArgs clusterArgs, IScheduler scheduler, ISchedulerJob job, IDistributable distributableJob) { ISchedulerCollection taskList = job.GetTaskList(scheduler.CreateFilterCollection(), scheduler.CreateSortCollection(), true); IStringCollection dependencyTasks = scheduler.CreateStringCollection(); if (!clusterArgs.OnlyDoCleanup) { dependencyTasks.Add(((ISchedulerTask)taskList[0]).Name); } ISchedulerTask cleanupTask = CreateCleanupTask(job, clusterArgs.ExternalRemoteDirectoryName, clusterArgs.StdErrRelativeDirName, clusterArgs.StdOutRelativeDirName, "cleanup", isFinalCleanup: true); Locally local = new Locally() { Cleanup = true, TaskCount = clusterArgs.TaskCount, Tasks = new RangeCollection(), ParallelOptions = new ParallelOptions() { MaxDegreeOfParallelism = 1 } }; DistributeApp.Distribute distributeExe = new DistributeApp.Distribute() { Distributor = local, Distributable = distributableJob }; string exeName = distributableJob is DistributableWrapper ? clusterArgs.ExeName : distributeExe.GetType().Assembly.GetName().Name; string taskCommandLine = string.Format("{0}\\{1} {2}", clusterArgs.ExeRelativeDirectoryName, exeName, CreateTaskString(distributeExe, clusterArgs.MinimalCommandLine)); cleanupTask.CommandLine = taskCommandLine; if (!clusterArgs.OnlyDoCleanup) { cleanupTask.DependsOn = dependencyTasks; } job.AddTask(cleanupTask); return(cleanupTask); }
static void Main(string[] args) { //change the headnode name here const string headnode = "[headnode]"; const string serviceName = "EchoService"; const int numRequests = 8; SessionStartInfo info = new SessionStartInfo(headnode, serviceName); //the sample code needs at least 2 cores in the cluster info.SessionResourceUnitType = SessionUnitType.Core; info.MaximumUnits = 2; info.MinimumUnits = 2; Console.Write("Creating a session for EchoService..."); using (DurableSession session = DurableSession.CreateSession(info)) { Console.WriteLine("done session id = {0}", session.Id); NetTcpBinding binding = new NetTcpBinding(SecurityMode.Transport); using (BrokerClient <IService1> client = new BrokerClient <IService1>(session, binding)) { Console.Write("Sending {0} requests...", numRequests); for (int i = 0; i < numRequests; i++) { EchoOnExitRequest request = new EchoOnExitRequest(new TimeSpan(0, 0, 5)); client.SendRequest <EchoOnExitRequest>(request, i); } client.EndRequests(); Console.WriteLine("done"); // cancel half of the service tasks when processing the requests ThreadPool.QueueUserWorkItem(delegate { //wait 5 seconds to try cancel service tasks. Thread.Sleep(3 * 1000); try { Scheduler scheduler = new Scheduler(); try { scheduler.Connect(headnode); } catch (Exception e) { Console.WriteLine("Error connecting store.{0}", e.ToString()); return; } int jobId = session.GetProperty <int>("HPC_ServiceJobId"); ISchedulerJob job = scheduler.OpenJob(jobId); job.Refresh(); ISchedulerCollection taskList = job.GetTaskList(null, null, true); int onFlag = 0; foreach (ISchedulerTask task in taskList) { // cancel half of the service tasks if (onFlag++ % 2 == 0) { try { if (task.State == TaskState.Running) { Console.WriteLine("Try to cancel task {0}", task.TaskId); job.CancelTask(task.TaskId); job.Commit(); } } catch (Exception ex) { Console.WriteLine("Got exception when trying to cancel task {0}:{1}", task.TaskId, ex.Message); } } } } catch (Exception ex) { Console.WriteLine("Exception when trying to cancel the service tasks. {0}", ex.Message); } }); Console.WriteLine("Retrieving responses..."); try { int count = 0; foreach (var response in client.GetResponses <EchoOnExitResponse>()) { try { string reply = response.Result.EchoOnExitResult; Console.WriteLine("\tReceived response for request {0}: {1}", response.GetUserData <int>(), reply); count++; } catch (Exception ex) { Console.WriteLine("Error occured while processing {0}-th request: {1}", response.GetUserData <int>(), ex.Message); } } Console.WriteLine("Done retrieving responses.{0}/{1} responses retrieved ", count, numRequests); } catch (SessionException ex) { Console.WriteLine("SessionException while getting responses: {0}", ex.Message); } catch (Exception ex) { Console.WriteLine("Exception while getting responses: {0}", ex.Message); } } // Close connections and delete messages stored in the system session.Close(); Console.WriteLine("Press any key to exit."); Console.ReadKey(); } }
public void RefreshJobStatus() { if (_job != null) { LogEntry oldVersion = (LogEntry)this.MemberwiseClone(); _job.Refresh(); JobState = _job.State; ISchedulerJobCounters counters = _job.GetCounters(); string stateStr = string.Format("{0}/{1}/{2}/{3}", counters.QueuedTaskCount, counters.RunningTaskCount, counters.FailedTaskCount, counters.FinishedTaskCount); FailedTaskCount = counters.FailedTaskCount; TaskStatus = stateStr; if (FailedTaskCount > 0) { IEnumerable <ISchedulerTask> tasklist = GetFailedTasks(_job); string failedTaskRangeAsString = tasklist.Select(task => task.TaskId.JobTaskId).StringJoin(","); if ("" != failedTaskRangeAsString) { this.FailedTasks = RangeCollection.Parse(failedTaskRangeAsString).ToString(); } else { FailedTasks = ""; } } else { FailedTasks = ""; } if (JobState == JobState.Finished) { if (WallTime.Ticks == 0) { DateTime startTime = _job.SubmitTime; DateTime endTime = _job.EndTime; WallTime = endTime - startTime; } if (CpuTime.Ticks == 0) { var tasklist = _job.GetTaskList(null, null, true).Cast <ISchedulerTask>(); var totalTicks = tasklist.Select(task => (task.EndTime - task.StartTime).Ticks).Sum(); CpuTime = new TimeSpan(totalTicks); } } bool taskStateChanged = FailedTasks != oldVersion.FailedTasks || TaskStatus != oldVersion.TaskStatus; bool jobStateChanged = JobState != oldVersion.JobState || (FailedTaskCount == 0) != (oldVersion.FailedTaskCount == 0) || string.IsNullOrEmpty(FailedTasks) != string.IsNullOrEmpty(oldVersion.FailedTasks) || CpuTime != oldVersion.CpuTime || WallTime != oldVersion.WallTime; //if (_taskStateChangedSinceLastEvent != taskStateChanged || _jobStateChangedSinceLastEvent != jobStateChanged) // Console.WriteLine("bad"); if (taskStateChanged) { RaiseTaskStateChangedEvent(); } if (jobStateChanged) { RaiseJobStateChangedEvent(); } } }