public List <SingleRunJob> GetNextJobs(int num) { List <double> toPostList = _theTracer.GetNextImsToPost(num); List <int> prioriList = _theTracer.GetNextPriosToPost(num, NWorkers); var jobs = new List <SingleRunJob>(num); int i; for (i = 0; i < num; i++) { jobs.Add(null); } i = 0; foreach (var im in toPostList) { if (Math.Abs(im) < 1e-6) { break; } var job = new SingleRunJob(SubFolder, Model, Record, im, prioriList[i]) { MyIdaJob = this }; jobs[i] = job; i++; } return(jobs); }
public void SetResult(SingleRunJob job, IdaPoint resPnt, out bool cancelPool, out bool deleteMe) { NWorkers--; _theTracer.UpdateStatus(ref resPnt, job.TheStatus); deleteMe = false; cancelPool = false; if (NWorkers <= 1) { deleteMe = true; _theTracer.EndTracing(); return; } if (_theTracer.StageChanged) { //we must delete posted jobs before execution cancelPool = true; } }
public static bool SetResultString(string result, out SingleRunJob job, out IdaPoint pnt) { // model record im edp endTime dvrgFlg job = null; pnt = null; var resList = result.Split(' ').ToList(); if (resList.Count < 2) { return(false); } var model = resList[0]; var rec = resList[1]; var im = Convert.ToDouble(resList[2]); job = JobPool.GetJob(model, rec, im); if (job.TheStatus != SingleRunJob.Status.Cancelled) { job.TheStatus = SingleRunJob.Status.Recieved; } else { job.TheStatus = SingleRunJob.Status.CancelRecieved; } pnt = new IdaPoint { Im = Convert.ToDouble(resList[2]), Edp = Convert.ToDouble(resList[3]), AnalysisEndTime = Convert.ToDouble(resList[4]), DivergFlag = Convert.ToInt16(resList[5]) != 0 }; IdaJob toDelete = null; var jobList = IdaJobPool.Where(idajob => idajob.Model == model && idajob.Record == rec).ToArray(); if (!jobList.Any()) { throw new Exception("IDAJob not found"); } var idaJob = jobList.ElementAt(0); bool cancel; bool deleteMe; idaJob.SetResult(job, pnt, out cancel, out deleteMe); if (cancel) { JobPool.CancelJobs(idaJob); } if (deleteMe) { toDelete = idaJob; Logger.LogIdaFinished(idaJob); } if (toDelete != null) { IdaJobPool.Remove(toDelete); if (LoadedJobsPool.Count == 0) { return(IdaJobPool.Count == 0); } IdaJobPool.Add(LoadedJobsPool[0]); LoadedJobsPool.RemoveAt(0); } return(IdaJobPool.Count == 0); }
public static void AddJob(SingleRunJob job) { var i = JobList.TakeWhile(oldJob => job.Priority >= oldJob.Priority).Count(); JobList.Insert(i, job); }
public static void LogResultRecieved(SingleRunJob job, IdaPoint pnt) { //Log(string.Format("New result (model= {0}, record= {1}, IM= {2})", job.Model, job.Record, job.Im)); }
internal static void LogJobSent(SingleRunJob job, IdaClient idaClient) { //Log(string.Format("New job (model= {0}, record= {1}, IM= {2}) was sent to {3} computer", job.Model, job.Record, job.Im, idaClient.Name)); }