Yes, that looks reasonable. Then, in KafkaApi, when we get into the handling of a specific request, we can construct the specific request object from struct.
Thanks, Jun On Wed, Mar 18, 2015 at 11:11 AM, Gwen Shapira <gshap...@cloudera.com> wrote: > 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 > >> >