Kafka.Client.ZooKeeperIntegration.Listeners.BrokerTopicsListener.ProcessBrokerChange C# (CSharp) Method

ProcessBrokerChange() private method

Processes change in the broker lists.
private ProcessBrokerChange ( string path, IEnumerable childs ) : void
path string The parent path of brokers list.
childs IEnumerable The current brokers.
return void
        private void ProcessBrokerChange(string path, IEnumerable<string> childs)
        {
            if (path != ZooKeeperClient.DefaultBrokerIdsPath)
            {
                return;
            }

            List<int> updatedBrokers = childs.Select(x => int.Parse(x, CultureInfo.InvariantCulture)).ToList();
            List<int> oldBrokers = this.oldBrokerIdMap.Select(x => x.Key).ToList();
            List<int> newBrokers = updatedBrokers.Except(oldBrokers).ToList();
            Logger.Debug("List of newly registered brokers -> " + newBrokers.ToMultiString(","));
            foreach (int bid in newBrokers)
            {
                string brokerInfo = this.zkclient.ReadData<string>(ZooKeeperClient.DefaultBrokerIdsPath + "/" + bid);
                string[] brokerHost = brokerInfo.Split(':');
                var port = int.Parse(brokerHost[2], CultureInfo.InvariantCulture);
                this.actualBrokerIdMap.Add(bid, new Broker(bid, brokerHost[1], brokerHost[1], port));
                if (this.callback != null)
                {
                    Logger.Debug("Invoking the callback for broker: " + bid);
                    this.callback(bid, brokerHost[1], port);
                }
            }

            List<int> deadBrokers = oldBrokers.Except(updatedBrokers).ToList();
            Logger.Debug("Deleting broker ids for dead brokers -> " + deadBrokers.ToMultiString(","));
            foreach (int bid in deadBrokers)
            {
                Logger.Debug("Deleting dead broker: " + bid);
                this.actualBrokerIdMap.Remove(bid);
                foreach (var topicMap in this.actualBrokerTopicsPartitionsMap)
                {
                    int affected = topicMap.Value.RemoveWhere(x => x.BrokerId == bid);
                    if (affected > 0)
                    {
                        Logger.Debug("Removing dead broker " + bid + " for topic: " + topicMap.Key);
                        Logger.Debug("Actual list of mapped brokers is -> " + topicMap.Value.ToMultiString(x => x.ToString(), ","));
                    }
                }
            }
        }