Dana, Again thanks for the feedback.

I will try that today and see what happens.

Is there anything special to start the loop?

What I mean is there any buffer byte to signify the start of the arrays?

-----Original Message-----
From: Dana Powers [mailto:dana.pow...@gmail.com] 
Sent: Wednesday, February 03, 2016 8:33 PM
To: users@kafka.apache.org
Subject: Re: Protocol Question

Hi Heath, a few comments:

(1) you should be looping on brokerCount
(2) you are missing the topic array count (4 bytes), and loop
(3) topic error code is int16, so only 2 bytes not 4
(4) you are missing the partition metadata array count (4 bytes), and loop
(5) you are missing the replicas and isr parsing.

-Dana

On Wed, Feb 3, 2016 at 6:01 PM, Heath Ivie <hi...@autoanything.com> wrote:

> Hi,
>
> I am trying to navigate through the protocol and I am seeing some 
> inconsistencies with the data.
>
> I am trying to parse out the MetadataResponse and I am seeing bytes in 
> between where they shouldn't be.
>
> I know they are extra, because if I up the offset the data after is 
> correct.
>
> Here is the part of the response that I am trying to parse:
> MetadataResponse => [Broker][TopicMetadata]
>   Broker => NodeId Host Port  (any number of brokers may be returned)
>     NodeId => int32
>     Host => string
>     Port => int32
>   TopicMetadata => TopicErrorCode TopicName [PartitionMetadata]
>     TopicErrorCode => int16
>   PartitionMetadata => PartitionErrorCode PartitionId Leader Replicas Isr
>     PartitionErrorCode => int16
>     PartitionId => int32
>     Leader => int32
>     Replicas => [int32]
>     Isr => [int32]
>
>
> I am seeing extra bytes after the topic error.
>
> I am not sure if this padding is expected or not?
>
> It may not be very readable, but here is my code (be nice :)).
>
> int offset =0;
>                     int correlationId = 
> BitConverter.ToInt32(ReverseBytes(bytes.Skip(offset).Take(4).ToArray()), 0);
>                     offset += 4;
>                     int brokerCount =
> BitConverter.ToInt32(ReverseBytes(bytes.Skip(offset).Take(4).ToArray()), 0);
>                     offset += 4;
>                     int nodeId =
> BitConverter.ToInt32(ReverseBytes(bytes.Skip(offset).Take(4).ToArray()), 0);
>                     offset += 4;
>                     int hostNameLength = 
> BitConverter.ToInt16(ReverseBytes(bytes.Skip(offset).Take(2).ToArray()), 0);
>                     offset += 2;
>
>                     string hostName = Encoding.ASCII.GetString(bytes, 
> offset, hostNameLength);
>                     offset += hostNameLength;
>
>                     int port =
> BitConverter.ToInt32(ReverseBytes(bytes.Skip(offset).Take(4).ToArray()), 0);
>                     offset += 4;
>
>                     int topicErrorCode = 
> BitConverter.ToInt32(ReverseBytes(bytes.Skip(offset).Take(4).ToArray()), 0);
>                     offset += 4;
>
>                     int topicNameLength = 
> BitConverter.ToInt16(ReverseBytes(bytes.Skip(offset).Take(2).ToArray()), 0);
>                     offset += 2;
>
>                     string topicName = Encoding.ASCII.GetString(bytes, 
> offset, topicNameLength);
>                     offset += topicNameLength;
>
>                     int partitionErrorCode = 
> BitConverter.ToInt16(ReverseBytes(bytes.Skip(offset).Take(2).ToArray()), 0);
>                     offset += 2;
>
>                     int partitionId =
> BitConverter.ToInt32(ReverseBytes(bytes.Skip(offset).Take(4).ToArray()), 0);
>                     offset += 4;
>
>                     int leaderId =
> BitConverter.ToInt32(ReverseBytes(bytes.Skip(offset).Take(4).ToArray()), 0);
>                     offset += 4;
>
>
> Any help would be cool, thanks
>
> Heath Ivie
> Solutions Architect
>
>
> Warning: This e-mail may contain information proprietary to 
> AutoAnything Inc. and is intended only for the use of the intended 
> recipient(s). If the reader of this message is not the intended 
> recipient(s), you have received this message in error and any review, 
> dissemination, distribution or copying of this message is strictly 
> prohibited. If you have received this message in error, please notify 
> the sender immediately and delete all copies.
>

Reply via email to