Пример #1
0
        private void MergeCommittedMessagesAndPassThemToSmartQueues(AntiEntropyMessage antiEntropyMessage)
        {
            if (!antiEntropyMessage.Committed.Any())
            {
                return;
            }

            CommittedMessages.AddRange(antiEntropyMessage.Committed);
            foreach (var smartQueue in _queues)
            {
                smartQueue.AddEvent(new Event(GetCommittedMessagesForSQ(smartQueue), EventType.ComittedMessages));
            }
        }
Пример #2
0
        private void MergeTentativeMessagesAndPassThemToTheSmartQueues(AntiEntropyMessage antiEntropyMessage)
        {
            if (!antiEntropyMessage.Tentative.Any())
            {
                return;
            }
            lock (_messagesLock)
            {
                ForeignTentativeMessages = _mergeProcedure.MergeMessages(antiEntropyMessage.Tentative, ForeignTentativeMessages);
            }

            foreach (var smartQueue in _queues)
            {
                smartQueue.AddEvent(new Event(ForeignTentativeMessages.Where(x => x.Packet.Topic == smartQueue.GetTopicId()).ToList(), EventType.TentativeMessages));
                smartQueue.AddEvent(new Event(antiEntropyMessage.Subscribers, EventType.AddSubscribers));
            }
        }
Пример #3
0
        private void AntiEntropyResponse(AntiEntropyMessage antiEntropyMessage)
        {
            Console.WriteLine("Time: " + _clock.ElapsedTimeSpan());

            _currentAntiEntropyRound = antiEntropyMessage.AntiEntropyRound;
            var primaryBroker = _brokers.Find(x => x.PrimaryNumber == antiEntropyMessage.PrimaryNumber);

            var numberOfBytesUsed = 0;

            _udpCommunication.SendAdministrationMessage(new AdministrationMessage(MessageType.AntiEntropy, MessagePackSerializer.Serialize(new AntiEntropyMessage
            {
                PrimaryNumber    = _jsonConfigurator.GetSettings().PrimaryNumber,
                Tentative        = _antiEntropy.GetTentativeMessagesToSendForPrimaryBroker(ref numberOfBytesUsed, _currentAntiEntropyRound),
                Publishers       = _antiEntropy.GetPublishers(),
                Subscribers      = _antiEntropy.GetSubscribers(),
                AntiEntropyRound = _currentAntiEntropyRound,
                Primary          = _isPrimary ? _jsonConfigurator.GetSettings().PrimaryNumber : 0
            })), primaryBroker.Ipadress, primaryBroker.Port);
            //StartWaitForPrimaryBroker(primaryBroker);
        }
Пример #4
0
 private void OnAntiEntropy(MessageReceivedEventArgs e)
 {
     AntiEntropyMessage?.Invoke(this, e);
 }
Пример #5
0
 public void AntiEntropyNonPrimaryMessageReceived(AntiEntropyMessage message)
 {
     //Todo: Store all new publishers
     MergeTentativeMessagesAndPassThemToTheSmartQueues(message);
     MergeCommittedMessagesAndPassThemToSmartQueues(message);
 }
Пример #6
0
 public void AntiEntropyAddTentativeMessages(AntiEntropyMessage antiEntropyMessage, ref int currentAntiEntropyRound, ref int globalSequenceNumber)
 {
     MergeTentativeMessagesAndPassThemToTheSmartQueues(antiEntropyMessage);
 }