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

Gary Helmling commented on HBASE-5448:
--------------------------------------

[[email protected]] Comments below:

bq. A thought. I think this pb-based way of doing dynamic cps elegant after 
looking at it a while. I know 'elegant' is not the first thing that comes to 
mind when you have pb and rpc in the mix, but hey, can't keep it to myself.

I'm glad someone sees it that way :)  It is at least consistent, if a little 
verbose.  I think it could be more "elegant" if we did a custom PB compiler 
plugin and required service implementors to compile their endpoint definitions 
with our own script or build target.  Then I think we could control the 
generated service method signatures.  Maybe if I'm feeling especially crazy 
I'll check that out over the holidays.  But I wouldn't consider actually 
shipping that unless it significantly simplified these cases and didn't require 
additional mass changes.

bq. One thing I think we have lost though going to this new mechanism is the 
ability to do generics: i.e. GenericProtocol over in hbase-server/src/test 
can't be made work now. I believe this so because pb requires you specify a 
type: https://developers.google.com/protocol-buffers/docs/proto#simple Do you 
agree G?

Yes, I agree, though in a way generics don't even apply with the use of 
protobufs.  Services could do more dynamic interpretation of messages, but it 
would be up to them to implement that in a way that made sense for the specific 
case.  I don't think there's anything we need to do to support this.

bq. How to do exceptions in a coprocessor? I see where we set the exception on 
the controller if there is one, but should we then abandon further processing – 
return? We need to call the RpcCallback done, though, right?

Yes, the exception should be set on the controller in order to be returned to 
the client.  It seems to be good practice to always call RpcCallback.done(), 
but it's not strictly required for endpoint implementations and it should also 
be fine to pass a null argument in the case of an exception.  Your 
implementation looks fine to me, assuming that "sum" is a required field in the 
proto message, otherwise you could skip setting the dummy value in the response 
on an exception.

One additional idea would be to define a custom unchecked exception 
(EndpointException extends RuntimeException?) which we could watch for and use 
to set the exception in the controller, but either with this or the current 
ResponseConverter.setControllerException() we're relying on convention over a 
real contract, which doesn't seem great.

                
> Support for dynamic coprocessor endpoints with PB-based RPC
> -----------------------------------------------------------
>
>                 Key: HBASE-5448
>                 URL: https://issues.apache.org/jira/browse/HBASE-5448
>             Project: HBase
>          Issue Type: Sub-task
>          Components: IPC/RPC, master, migration, regionserver
>            Reporter: Todd Lipcon
>            Assignee: Gary Helmling
>             Fix For: 0.96.0
>
>         Attachments: HBASE-5448_2.patch, HBASE-5448_3.patch, 
> HBASE-5448_4.patch, HBASE-5448.patch
>
>


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to