Пример #1
0
        /// <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);
                    }
                }
            }
        }