Exemplo n.º 1
0
        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)}.");
        }
Exemplo n.º 2
0
        private JobProcessor2 CreateJobProcessor(FJobRequest fJobRequest, int instanceNum)
        {
            FGenJob       job    = CreateJob(fJobRequest);
            JobProcessor2 result = new JobProcessor2(job, instanceNum);

            return(result);
        }
Exemplo n.º 3
0
 private FCoordsResult GetNewCoords(FJobRequest fJobRequest)
 {
     using (CoordsMath cm = new CoordsMath())
     {
         FCoordsResult result = cm.GetNewCoords(fJobRequest);
         return(result);
     }
 }
Exemplo n.º 4
0
        public SCoords DoOp(SCoordsWorkRequest sCoordsWorkRequest)
        {
            FJobRequest fJobRequest  = CreateFJobRequest(sCoordsWorkRequest, ++_nextJobId);
            string      requestMsgId = SendJobToMq(fJobRequest);

            SCoords result = GetResponseFromMq(requestMsgId);

            return(result);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        //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);
        }
Exemplo n.º 8
0
        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);
            }
        }
Exemplo n.º 9
0
        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);
            }
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        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);
            }
        }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 15
0
        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);
        }
Exemplo n.º 16
0
        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}.");
            }
        }
Exemplo n.º 17
0
        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();
        }
Exemplo n.º 18
0
        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);
        }