Пример #1
0
        //If it is special message, it has to send to all the operators.
        //If it is barrier message, batch manager will start to track it
        //by using BarrierMsgTrackingInfo which keep and ID and the number of
        //client it sent to.
        private async Task <Task> ProcessSpecialMessage(StreamMessage msg, IAsyncStream <StreamMessage> stream)
        {
            BarrierOrCommitMsgTrackingInfo info = new BarrierOrCommitMsgTrackingInfo(msg.barrierOrCommitInfo.GetID(), msg.barrierOrCommitInfo.numberOfClientSent);

            info.BatchID = msg.BatchID;
            if (msg.Value == Constants.Barrier_Value && msg.BatchID - currentBatchID < 2)
            {
                currentBatchID = msg.BatchID + 1;
                PrettyConsole.Line("Increment ID " + currentBatchID);
                await TrackingBarrierMessages(msg);
                await BroadcastSpecialMessage(msg, stream);

                await batchTracker.CompleteOneOperatorBarrier(info);
            }
            return(Task.CompletedTask);
        }
        private async Task <Task> ProcessSpecialMessage(StreamMessage msg)
        {
            if (msg.Value == Constants.Barrier_Value)
            {
                //Just complete the tracking
                await batchTracker.CompleteOneOperatorBarrier(msg.barrierOrCommitInfo);

                numberCurrentBatchBarrierReceived++;
                if (numberOfUpStream == numberCurrentBatchBarrierReceived)
                {
                    //PrettyConsole.Line("Start process normal message");
                    await ProcessMessagesInTheBuffer(currentBatchID + 1);

                    numberCurrentBatchBarrierReceived = 0;
                }
            }
            return(Task.CompletedTask);
        }
        protected async Task <Task> ProcessSpecialMessageAsync(StreamMessage msg, IAsyncStream <StreamMessage> stream)
        {
            BarrierOrCommitMsgTrackingInfo info = new BarrierOrCommitMsgTrackingInfo(msg.barrierOrCommitInfo.GetID(), msg.barrierOrCommitInfo.numberOfClientSent);

            info.BatchID = msg.BatchID;
            if (msg.Value == Constants.Barrier_Value)
            {
                if (CheckCount(msg))
                {
                    await HandleBarrierMessages(msg);

                    batchTracker.CompleteOneOperatorBarrier(info);
                }
            }
            else
            {
                throw new NotImplementedException("Unrecgonizable system message in stateless operator");
            }
            await BroadcastSpecialMessage(msg, stream);

            return(Task.CompletedTask);
        }