/// <summary> /// Requeues failed and canceled tasks for the given job. First checks that there are any, otherwise won't do anything. /// This is thread safe, locking on the job. /// </summary> /// <param name="scheduler"></param> /// <param name="job"></param> public static void RequeueFailedAndCanceledTasks(IScheduler scheduler, ISchedulerJob job) { lock (job) { job.Refresh(); var counters = job.GetCounters(); if (counters.FailedTaskCount > 0 || counters.CanceledTaskCount > 0) { var failedTasks = GetFailedAndCanceledTasks(scheduler, job); foreach (ISchedulerTask task in failedTasks) { job.RequeueTask(task.TaskId); } if (job.State != Microsoft.Hpc.Scheduler.Properties.JobState.Running) { scheduler.ConfigureJob(job.Id); scheduler.SubmitJob(job, null, null); } } } }