internal static TopicMetadata ReadFrom(ByteBuffer buffer, Dictionary <int, Broker> brokers) { var errorCode = ApiUtils.ReadShortInRange(buffer, "error code", Tuple.Create((short)-1, short.MaxValue)); var topic = ApiUtils.ReadShortString(buffer); var numPartitions = ApiUtils.ReadIntInRange(buffer, "number of partitions", Tuple.Create(0, int.MaxValue)); var partitionsMetadata = new List <PartitionMetadata>(numPartitions); for (var i = 0; i < numPartitions; i++) { var partitionMetadata = PartitionMetadata.ReadFrom(buffer, brokers); partitionsMetadata.Add(partitionMetadata); } return(new TopicMetadata(topic, partitionsMetadata, errorCode)); }
public static PartitionMetadata ReadFrom(ByteBuffer buffer, Dictionary <int, Broker> brokers) { var errorCode = ApiUtils.ReadShortInRange( buffer, "error code", Tuple.Create <short, short>(-1, short.MaxValue)); var partitionId = ApiUtils.ReadIntInRange(buffer, "partition id", Tuple.Create(0, int.MaxValue)); // partition id var leaderId = buffer.GetInt(); var leader = brokers[leaderId]; // list of all replicas var numReplicas = ApiUtils.ReadIntInRange(buffer, "number of all replicas", Tuple.Create(0, int.MaxValue)); var replicaIds = Enumerable.Range(0, numReplicas).Select(_ => buffer.GetInt()).ToList(); var replicas = replicaIds.Select(x => brokers[x]).ToList(); // list of in-sync replicasd var numIsr = ApiUtils.ReadIntInRange(buffer, "number of in-sync replicas", Tuple.Create(0, int.MaxValue)); var isrIds = Enumerable.Range(0, numIsr).Select(_ => buffer.GetInt()).ToList(); var isr = isrIds.Select(x => brokers[x]).ToList(); return(new PartitionMetadata(partitionId, leader, replicas, isr, errorCode)); }