[ 
https://issues.apache.org/jira/browse/BOOKKEEPER-582?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14017533#comment-14017533
 ] 

Ivan Kelly commented on BOOKKEEPER-582:
---------------------------------------

My 2 main issues are (i.e. the source of the -1):

 * *Use of an enum for flags:* This is covered a lot in review board, but 
basically, by using an enum for the flag, you can only have one flag at a time. 
Sijie's work around for this is to have combinatorial flags, but assuming each 
flag is independent of each other flag, the number of entries for the enum 
grows at O(n^2). In my opinion, the protocol would be cleaner and easier to 
maintain if each flag was a boolean.

 * *Sending error messages twice:* In the response part, there's an error 
message for the packet and one for each individual response. According to 
sijie, one is for packet level errors, the other is for entry level errors. 
These should use separate error codes in this case. And it would be better if 
these were only considered separate when there are multiple entries in a
response, which actually is never the case right now. For this, I would like to 
see separate error enums (if we are stuck with using enums) for packet level 
and entry level. Alternatively, we could remove the concept of packet error, 
and have a container message for operations with multiple reads which can hold 
the "packet" level error if needed.

If these two were resolved I would change my vote to -0 or +0. The other 
issues, which are less important are:

 * *Use of enum for errors:* Errors originate at the server, and the server can 
have a newer version of the protocol than the client, so the server could 
theoretically have a new error code that the client doesn't know about and this 
would cause a runtime exception on the client. In my view it would be better to 
have a catchall, so that you don't have to maintain a error compatibility map 
on the server side which will push unknown errors into some catchall category 
anyhow.

 * *Too much required:* Again, this is an issue of leaving the protocol open to 
future enhancements. We've had problems in hedwig that we couldn't change a 
field for BC issues, so now we have to set it with a dummy value every time we 
use the message even though neither the client nor the server use it.

Resolving these would move me to a +1.

> Make bookie and client use protobuf for requests (non-wire part)
> ----------------------------------------------------------------
>
>                 Key: BOOKKEEPER-582
>                 URL: https://issues.apache.org/jira/browse/BOOKKEEPER-582
>             Project: Bookkeeper
>          Issue Type: Sub-task
>          Components: bookkeeper-client, bookkeeper-server
>            Reporter: Ivan Kelly
>            Assignee: Aniruddha
>             Fix For: 4.3.0
>
>         Attachments: 
> 0002-BOOKKEEPER-582-Make-bookie-and-client-use-protobuf-f.patch, 
> 0002-BOOKKEEPER-582-Make-bookie-and-client-use-protobuf-f.patch, 
> 0002-BOOKKEEPER-582-Make-bookie-and-client-use-protobuf-f.patch, 
> 0003-BOOKKEEPER-582-Make-bookie-and-client-use-protobuf-f.patch, 
> BOOKKEEPER-582.diff, BOOKKEEPER-582.v2.diff, BOOKKEEPER-582.v3.diff
>
>
> Make the client and the bookie use protobufs internally. This is the first 
> step to using protobufs on the wire, but for the moment, BookieRequestHandler 
> decodes the old wire protocol into the protobuf messages. Once this is in, 
> enabling on the wire will be very simple, and the old manual serialization 
> can be made "legacy" (still supported, but deprecated).



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to