Exactly. We still have wire compatibility, we just avoid the redundant
work of wrapping the whole thing.

-Todd

On Mon, Mar 19, 2012 at 8:11 AM, Robert Evans <ev...@yahoo-inc.com> wrote:
> I think what we are talking about here is removing some of the extra layers 
> of abstraction in java.  The wire protocol used will be identical in either 
> case.  It is just that we would have to use the Protocol Buffer Builder APIs 
> instead of wrapping them with our own custom getters/setters.
>
> I am +1 for reducing the layers needed to add/modify the RPC.
>
> --Bobby Evans
>
> On 3/19/12 2:17 AM, "Jitendra Pandey" <jiten...@hortonworks.com> wrote:
>
>  Wire compatibility in hdfs private protocols between different
> components is also important for rolling upgrades. We do want to support
> upgrading different components of a cluster independent of each other and
> wire compatibility is one of the essential prerequisites. Therefore, even
> if some protocols are not exposed to the users, and are just used within
> different internal components, we still cannot afford to compromise on wire
> compatibility on those interfaces.
>
> On Sat, Mar 17, 2012 at 3:31 PM, Todd Lipcon <t...@cloudera.com> wrote:
>
>> Hi all,
>>
>> I've been working on some patches recently that required adding a new
>> protocol and some RPC calls that will be used entirely internally to
>> HDFS -- i.e the types and functions are never exposed to clients. The
>> process to do this involved:
>> 1) Add a new .proto file MyProtocol.proto with the types and the
>> service definition
>> 2) Add a new empty Java interface MyProtocolPB.java which adds the
>> ProtocolInfo and KerberosInfo annotations
>> 3) Add a new Java interface MyProtocol.java which duplicates the same
>> methods I defined in the protobuf service
>> 4) For each new type, create a new Java class which duplicates the
>> fields, getters, and setters from the protobuf messages
>> 5) Create a Client-Side Translator and Server-Side Translator class,
>> each containing a wrapper method for each of the calls
>> 6) Create a PBHelper class which contains two convert() methods for
>> each of the new types
>>
>> Given that we have many protocols that we never intend to expose, I
>> see little benefit to adding the indirection layer here. It only makes
>> the task of modifying the protocols quite onerous and full of
>> duplicate boilerplate code.
>> I'd like to propose that, when adding protocols that are meant to be
>> HDFS-private, we drop steps 3-6 and use the protobuf RPC engine
>> directly. Doing this doesn't force our hand or limit our options in
>> the future -- should we want to add an alternate mechanism one can
>> always add the indirection layer down the road.
>>
>> Thoughts?
>>
>> -Todd
>> --
>> Todd Lipcon
>> Software Engineer, Cloudera
>>
>
>
>
> --
>



-- 
Todd Lipcon
Software Engineer, Cloudera

Reply via email to