Hi Jun,

I was taking a slightly different approach. Let me know if it makes
sense to you:

1. Get the bytes from network (kinda unavoidable...)
2. Modify RequestChannel.Request to contain header and body (instead
of a single object)
3. Create the head and body from bytes as follow:
    val header: RequestHeader = RequestHeader.parse(buffer)
    val apiKey: Int = header.apiKey
    val body: Struct =
ProtoUtils.currentRequestSchema(apiKey).read(buffer).asInstanceOf[Struct]
4. KafkaAPIs will continue getting RequestChannel.Request, but will
now have access to body and header separately.

I agree that I need a Request/Response objects that contain only the
body for all requests objects.
I'm thinking of implementing them in o.a.k.Common.Requests in Java for
consistency.

When we are discussing the requests/responses used in SimpleConsumer,
we mean everything used in javaapi, right?

Gwen



On Wed, Mar 18, 2015 at 9:55 AM, Jun Rao <j...@confluent.io> wrote:
> Hi, Gwen,
>
> I was thinking that we will be doing the following in KAFKA-1927.
>
> 1. Get the bytes from network.
> 2. Use a new generic approach to convert bytes into request objects.
> 2.1 Read the fixed request header (using the util in client).
> 2.2 Based on the request id in the header, deserialize the rest of the
> bytes into a request specific object (using the new java objects).
> 3. We will then be passing a header and an AbstractRequestResponse to
> KafkaApis.
>
> In order to do that, we will need to create similar request/response
> objects for internal requests such as StopReplica, LeaderAndIsr,
> UpdateMetadata, ControlledShutdown. Not sure whether they should be written
> in java or scala, but perhaps they should be only in the core project.
>
> Also note, there are some scala requests/responses used directly in
> SimpleConsumer. Since that's our public api, we can't remove those scala
> objects until the old consumer is phased out. We can remove the rest of the
> scala request objects.
>
> Thanks,
>
> Jun
>
>
> On Tue, Mar 17, 2015 at 6:08 PM, Gwen Shapira <gshap...@cloudera.com> wrote:
>
>> Hi,
>>
>> I'm starting this thread for the various questions I run into while
>> refactoring the server to use client requests and responses.
>>
>> Help is appreciated :)
>>
>> First question: LEADER_AND_ISR request and STOP_REPLICA request are
>> unimplemented in the client.
>>
>> Do we want to implement them as part of this refactoring?
>> Or should we continue using the scala implementation for those?
>>
>> Gwen
>>

Reply via email to