public Job(FJobRequest fJobRequest, string requestMsgId) { FJobRequest = fJobRequest; RequestMsgId = requestMsgId; FGenJob fGenJob = BuildFGenJob(fJobRequest); FGenerator = new FGenerator(fGenJob); //_position = new KPoint(fJobRequest.Area.Point.X * FGenerator.BLOCK_WIDTH, fJobRequest.Area.Point.Y * FGenerator.BLOCK_HEIGHT); _position = new KPoint(fJobRequest.Area.Point.X, fJobRequest.Area.Point.Y); _subJobIterator = new SubJobIterator(this); ResetSubJobsRemainingToBeSent(); _closed = false; Debug.WriteLine($"Creating new Repo. Name: {Name}, JobId: {JobId}."); _countsRepo = new ValueRecords <KPoint, SubJobResult>(Name); ReportRepoContents(); //Debug.WriteLine($"Starting to get histogram for {Name} at {DateTime.Now.ToString(DiagTimeFormat)}."); //Dictionary<int, int> h = GetHistogram(); //Debug.WriteLine($"Histogram complete for {Name} at {DateTime.Now.ToString(DiagTimeFormat)}."); }
private JobProcessor2 CreateJobProcessor(FJobRequest fJobRequest, int instanceNum) { FGenJob job = CreateJob(fJobRequest); JobProcessor2 result = new JobProcessor2(job, instanceNum); return(result); }
private FCoordsResult GetNewCoords(FJobRequest fJobRequest) { using (CoordsMath cm = new CoordsMath()) { FCoordsResult result = cm.GetNewCoords(fJobRequest); return(result); } }
public SCoords DoOp(SCoordsWorkRequest sCoordsWorkRequest) { FJobRequest fJobRequest = CreateFJobRequest(sCoordsWorkRequest, ++_nextJobId); string requestMsgId = SendJobToMq(fJobRequest); SCoords result = GetResponseFromMq(requestMsgId); return(result); }
public Histogram GetHistogram(int jobId) { FJobRequest fJobRequest = FJobRequest.CreateGetHistogramRequest(jobId); string requestMsgId = SendJobToMq(fJobRequest); FHistorgram fHistorgram = GetResponseFromMq(requestMsgId); Histogram result = new Histogram(jobId, fHistorgram.GetValues(), fHistorgram.GetOccurances()); return(result); }
private FJobRequest CreateFJobRequest(int jobId, SMapWorkRequest smwr) { Coords coords = smwr.SCoords.GetCoords(); RectangleInt area = smwr.Area.GetRectangleInt(); SizeInt samplePoints = smwr.CanvasSize.GetSizeInt(); FJobRequest fJobRequest = new FJobRequest(jobId, smwr.Name, FJobRequestType.Generate, coords, area, samplePoints, (uint)smwr.MaxIterations); return(fJobRequest); }
//private void AddLines(int lineCnt, BlockingCollection<int> lineQ) //{ // int cnt = (lineCnt + 1)/ 2; // int lLine; // int hLine; // if (lineCnt % 2 != 0) // { // _lineQ.Add(cnt); // lLine = cnt - 1; // hLine = cnt + 1; // cnt--; // } // else // { // lLine = cnt; // hLine = cnt + 1; // } // for (int cntr = 0; cntr < cnt; cntr++) // { // _lineQ.Add(lLine--); // _lineQ.Add(hLine++); // } //} Tuple <JobProcessor2, Task> BuildLineProcessor(FJobRequest fJobRequest, int instanceNum, string requestMsgId, BlockingCollection <PointInt> subJobQ, MessageQueue outQ, CancellationToken ct) { JobProcessor2 jobProcessor = CreateJobProcessor(fJobRequest, instanceNum); Task t = Task.Run(() => ProcessSubJobs(jobProcessor, requestMsgId, subJobQ, outQ, ct)); Tuple <JobProcessor2, Task> result = new Tuple <JobProcessor2, Task>(jobProcessor, t); return(result); }
private string SendReplayJobRequestToMq(JobForMq job) { using (MessageQueue outQ = MqHelper.GetQ(OUTPUT_Q_PATH, QueueAccessMode.Send, null, null)) { FJobRequest fJobRequest = FJobRequest.CreateReplayRequest(job.JobId); Message m = new Message(fJobRequest); outQ.Send(m); return(m.Id); } }
private string SendJobToMq(FJobRequest fJobRequest) { using (MessageQueue outQ = MqHelper.GetQ(OUTPUT_Q_PATH, QueueAccessMode.Send, null, null)) { Debug.WriteLine($"Sending request with JobId {fJobRequest.JobId} to output Q."); Message m = new Message(fJobRequest); outQ.Send(m); return(m.Id); } }
private FJobRequest CreateJobRequestSimple(int jobId) { FJobRequest result = new FJobRequest( jobId, "simple", FJobRequestType.Generate, new Coords("-2", "1", "-1", "1"), new RectangleInt(new PointInt(0, 0), new MqMessages.SizeInt(1, 1)), new SizeInt(100, 100), 300); return(result); }
private FGenJob CreateJob(FJobRequest fJobRequest) { PointDd start = new PointDd(new Dd(fJobRequest.Coords.StartX), new Dd(fJobRequest.Coords.StartY)); PointDd end = new PointDd(new Dd(fJobRequest.Coords.EndX), new Dd(fJobRequest.Coords.EndY)); qdDotNet.SizeInt samplePoints = new qdDotNet.SizeInt(fJobRequest.SamplePoints.W, fJobRequest.SamplePoints.H); qdDotNet.RectangleInt area = new qdDotNet.RectangleInt( new qdDotNet.PointInt(fJobRequest.Area.Point.X, fJobRequest.Area.Point.Y), new qdDotNet.SizeInt(fJobRequest.Area.Size.W, fJobRequest.Area.Size.H)); FGenJob fGenJob = new FGenJob(fJobRequest.JobId, start, end, samplePoints, fJobRequest.MaxIterations, area); return(fGenJob); }
private FHistorgram GetHistogram(FJobRequest fJobRequest) { int jobId = fJobRequest.JobId; if (TryGetJob(jobId, out Job job)) { IDictionary <int, int> h = job.GetHistogram(); FHistorgram result = new FHistorgram(jobId, h); return(result); } else { return(null); } }
private FJobRequest CreateFJobRequest(SCoordsWorkRequest sCoordsWorkRequest, int jobId) { SCoords sCoords = sCoordsWorkRequest.SCoords; MqMessages.Coords coords = new MqMessages.Coords(sCoords.LeftBot.X, sCoords.RightTop.X, sCoords.LeftBot.Y, sCoords.RightTop.Y); CanvasSize cs = sCoordsWorkRequest.CanvasSize; SizeInt samplePoints = new SizeInt(cs.Width, cs.Height); MapSection ms = sCoordsWorkRequest.MapSection; RectangleInt area = new RectangleInt(new PointInt(ms.SectionAnchor.X, ms.SectionAnchor.Y), new SizeInt(ms.CanvasSize.Width, ms.CanvasSize.Height)); string name = "CoordsRequest"; FJobRequest fJobRequest = new FJobRequest(jobId, name, FJobRequestType.TransformCoords, coords, area, samplePoints, 0, sCoordsWorkRequest.TransformType); return(fJobRequest); }
private FJobRequest CreateJobRequest(int jobId) { string sx = "-1.7857676027665607066624802717953e+00"; string ex = "-1.7857676027665530776998846126562e+00"; string sy = "2.6144131561272207052702956846845e-06"; string ey = "2.6144131613543258281816096430700e-06"; FJobRequest result = new FJobRequest( jobId, "hiRez16test", FJobRequestType.Generate, new Coords(sx, ex, sy, ey), new RectangleInt(new PointInt(10, 0), new MqMessages.SizeInt(10, 7)), new SizeInt(10800, 7200), 4000); return(result); }
public MTGenJobProcessor( FJobRequest fJobRequest, string requestMsgId, MessageQueue outQ, int threadCount ) { _cts = new CancellationTokenSource(); //_lineQ = new BlockingCollection<int>(); _subJobQ = new BlockingCollection <PointInt>(); _processorTasks = new List <Tuple <JobProcessor2, Task> >(); for (int cntr = 0; cntr < threadCount; cntr++) { _processorTasks.Add(BuildLineProcessor(fJobRequest, cntr, requestMsgId, _subJobQ, outQ, _cts.Token)); } //AddLines(fJobRequest.Area.Size.H, _lineQ); LoadSubJobs(fJobRequest.Area.Size, _subJobQ); }
private void HandleRequestMessage(FJobRequest jobRequest, string requestMsgId) { try { switch (jobRequest.RequestType) { case FJobRequestType.Generate: Console.WriteLine($"Starting Job: {jobRequest.JobId}."); Job job = new Job(jobRequest, requestMsgId); // Send all blocks on file. _replayWorkQueue.Add(job); // Add job to list of jobs from which new "build block" operations are queued. SubmitJob(job); Console.WriteLine($"The job has been started. Job: {jobRequest.JobId}."); break; case FJobRequestType.Replay: Console.WriteLine($"\n\nReplaying Job: {jobRequest.JobId}."); ReplayExistingJob(jobRequest.JobId); break; case FJobRequestType.GetHistogram: Console.WriteLine($"Handling GetHistogram Job: {jobRequest.JobId}."); FHistorgram fHistorgram = GetHistogram(jobRequest); Console.WriteLine($"Sending GetHistogram Result for Job: {jobRequest.JobId}."); SendHistogram(fHistorgram, requestMsgId); break; //case FJobRequestType.IncreaseInterations: // break; case FJobRequestType.TransformCoords: Console.WriteLine($"Handling Transform Coords Job: {jobRequest.JobId}."); FCoordsResult fCoordsResult = GetNewCoords(jobRequest); SendFCoordsResult(fCoordsResult, requestMsgId); break; case FJobRequestType.Delete: bool deleteJob = jobRequest.Name.ToLowerInvariant() == "deljob"; string delClause = deleteJob ? $". Deleting the repo" : null; Console.WriteLine($"Cancelling Job: {jobRequest.JobId}{delClause}."); CancelJob(jobRequest.JobId, deleteJob); Console.WriteLine($"The Job has been stopped Job: {jobRequest.JobId}."); break; default: Console.WriteLine($"Ignoring JobRequest with type: {jobRequest.RequestType} with JobId: {jobRequest.JobId}."); break; } } catch (Exception e) { Debug.WriteLine($"Got an exception while processing a request message. The error is {e.Message}."); } }
public async Task HandleJobs(CancellationToken cToken) { //HandleJobResponses(m.Id, cToken); _outQ = MqHelper.GetQ(OUTPUT_Q_PATH, QueueAccessMode.Send, null, null); Task t1 = Task.Run(() => SendProcessor(_sendQueue, _outQ, _cts.Token), _cts.Token); _subJobProcessors = new SubJobProcessor[NUM_THREADS]; for (int wpCntr = 0; wpCntr < NUM_THREADS; wpCntr++) { _subJobProcessors[wpCntr] = new SubJobProcessor(_workQueue, _sendQueue, wpCntr); _subJobProcessors[wpCntr].Start(); } _jobReplayProcessor = new JobReplayProcessor(_replayWorkQueue, _sendQueue); _jobReplayProcessor.Start(); Task t2 = Task.Run(() => ProcessJobs(_workQueue, _cts.Token), _cts.Token); Type[] rTtypes = new Type[] { typeof(FJobRequest) }; MessagePropertyFilter mpf = new MessagePropertyFilter { Body = true, Id = true, CorrelationId = true }; using (MessageQueue inQ = MqHelper.GetQ(INPUT_Q_PATH, QueueAccessMode.Receive, rTtypes, mpf)) { while (!cToken.IsCancellationRequested) { Message m = await MqHelper.ReceiveMessageAsync(inQ, WaitDuration); if (cToken.IsCancellationRequested) { break; } if (m != null) { Debug.WriteLine("Received a request message."); FJobRequest jobRequest = null; string requestType = "Unknown"; try { jobRequest = (FJobRequest)m.Body; requestType = jobRequest.RequestType.ToString(); Debug.WriteLine($"The message type is {requestType}. JobId: {jobRequest.JobId}."); HandleRequestMessage(jobRequest, m.Id); } catch (Exception e) { Debug.WriteLine($"Got an exception while processing a FJobRequest message of type {requestType}. The error is {e.Message}."); } } else { Debug.WriteLine("No request message present."); } } } Debug.WriteLine("Worker thread ending, starting cleanup routine."); Cleanup(); }
public FCoordsResult GetNewCoords(FJobRequest fJobRequest) { FCoordsResult result = null; if (fJobRequest.RequestType != FJobRequestType.TransformCoords) { throw new ArgumentException("The request type must be TransformCoords."); } if (!fJobRequest.TransformType.HasValue) { throw new ArgumentException("The transform type cannot be null."); } MCoordsDd curCoords = GetMCoords(fJobRequest.Coords); switch (fJobRequest.TransformType) { case TransformType.In: qdDotNet.SizeInt sizeInt = new qdDotNet.SizeInt(fJobRequest.SamplePoints.W, fJobRequest.SamplePoints.H); qdDotNet.RectangleInt area = new qdDotNet.RectangleInt( new qdDotNet.PointInt(fJobRequest.Area.Point.X, fJobRequest.Area.Point.Y), new qdDotNet.SizeInt(fJobRequest.Area.Size.W, fJobRequest.Area.Size.H)); MCoordsDd newCoords = _fCoordsMath.ZoomIn(curCoords, sizeInt, area); result = GetResult(fJobRequest.JobId, newCoords); break; case TransformType.Out: double amount = GetAmount(fJobRequest.Area.Point.X); newCoords = _fCoordsMath.ZoomOut(curCoords, amount); result = GetResult(fJobRequest.JobId, newCoords); break; case TransformType.Right: amount = GetAmount(fJobRequest.Area.Point.X); newCoords = _fCoordsMath.ShiftRight(curCoords, amount); result = GetResult(fJobRequest.JobId, newCoords); break; case TransformType.Left: amount = GetAmount(fJobRequest.Area.Point.X); newCoords = _fCoordsMath.ShiftRight(curCoords, -amount); result = GetResult(fJobRequest.JobId, newCoords); break; case TransformType.Down: amount = GetAmount(fJobRequest.Area.Point.X); newCoords = _fCoordsMath.ShiftUp(curCoords, -amount); result = GetResult(fJobRequest.JobId, newCoords); break; case TransformType.Up: amount = GetAmount(fJobRequest.Area.Point.X); newCoords = _fCoordsMath.ShiftUp(curCoords, amount); result = GetResult(fJobRequest.JobId, newCoords); break; default: Debug.WriteLine($"Transform Type: {fJobRequest.TransformType} is not supported."); break; } return(result); }