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)); } }
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)); } }
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); }
private void OnAntiEntropy(MessageReceivedEventArgs e) { AntiEntropyMessage?.Invoke(this, e); }
public void AntiEntropyNonPrimaryMessageReceived(AntiEntropyMessage message) { //Todo: Store all new publishers MergeTentativeMessagesAndPassThemToTheSmartQueues(message); MergeCommittedMessagesAndPassThemToSmartQueues(message); }
public void AntiEntropyAddTentativeMessages(AntiEntropyMessage antiEntropyMessage, ref int currentAntiEntropyRound, ref int globalSequenceNumber) { MergeTentativeMessagesAndPassThemToTheSmartQueues(antiEntropyMessage); }