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

stack commented on HBASE-12597:
-------------------------------

bq.  This enabled me to remove setRpcClient on HConnectionImplementation.

Nice.

bq.  I am not sure if this should be private or public since it can now be used 
for a new implementation.

Keep it private for now. Once it working and two implementations, then we can 
make it public/evolving.

bq. What is the process to add this?

I beileve [~anoopsamjohn] is refering to the 'release note' attribute of this 
here JIRA.

The defines look generic enough that they should be in RpcClient Interface 
rather than in AbstractRpcClient.   These defines in Abstract class probably 
ain't the best.   Otherwise, if defines go to the Interface, I think this 
AbstractRpcClient looks good -- you using it in your async class?  If so, 
that'd be argument in favor...

One thought is that rather than 'stop' an RpcClient, should it implement 
https://docs.oracle.com/javase/7/docs/api/java/io/Closeable.html instead?

What about stuff like Call class inside in the RpcClientImpl? You don't need 
them in your implementation?  You do something else? Ditto Connection.  If so, 
np.  I suppose an RpcClient has a Connection?  A single Connection?  Or this is 
implementation detail?   Or I supopse it is not... protocol is all around 
Connections.  If so, how you doing this over in your client?

Yeah, referring to defines in abstract classes is a little odd 
AbstractRpcClient.FAILED_SERVER_EXPIRY_DEFAULT

Looking good.




> Add RpcClient interface and enable changing of RpcClient implementation
> -----------------------------------------------------------------------
>
>                 Key: HBASE-12597
>                 URL: https://issues.apache.org/jira/browse/HBASE-12597
>             Project: HBase
>          Issue Type: Improvement
>          Components: Client
>            Reporter: Jurriaan Mous
>         Attachments: HBASE-12597-v1.patch, HBASE-12597-v2.patch, 
> HBASE-12597-v3.patch, HBASE-12597.patch
>
>
> Currently HConnectionImplementation works with the included RpcClient which 
> is a direct implementation and not defined by an interface.
> It would be great to be able to swap out the default RpcClient with another 
> implementation which can also be controlled by the default 
> HConnectionImplementation. 
> Suggested changes:
> - Create a RpcClient interface which defines all the ways 
> HConnectionImplementation interacts with an RPC client. Like getting a 
> blocking protobuf service interface or closing the client.
> - Define which RpcClient implementation to construct by setting a 
> configuration variable which defaults to the current RpcClient.
> - Possibly create an abstract RpcClient class to only load all the basic Rpc 
> layer configurations to be used in an implementation.
> Why? It enables experimentation with RpcClients which could enable new 
> features or could be more performant than the included client. 
> I created a new RpcClient implementation based on Netty which can also be 
> called asynchronously. It would be great to also be able to use this 
> RpcClient in all the default ways and tests to see if there are any issues 
> with it. 
> https://github.com/jurmous/async-hbase-client/
> https://github.com/jurmous/async-hbase-client/blob/master/src/main/java/org/apache/hadoop/hbase/ipc/AsyncRpcClient.java



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to