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

Jurriaan Mous commented on HBASE-12668:
---------------------------------------

I am trying to do this step by step to be sure each step is correct. So I would 
first propose an async RpcClient which works with all current sync API. Nothing 
fancy, just a main AsyncRpcClient class, A SaslHandler, a new Call class (Or 
adapt current one), and a Response Handler and make sure it can be loaded with 
config to replace main RpcClient. And if it is found to be working great and 
better performant it could become the default and the current one could be 
removed.

In an async RpcClient a lot of stuff in AsyncProcess would not be needed. 
(Netty handles that internally while handling the communication) AsyncProcess 
now seems to be a complex piece of code to simulate async calls by throwing 
sync calls onto new threads and collects all responses. But it is needed while 
the old blocking RpcClient exists.

Does it sound like a good path to do this step by step? And if AsyncRpcClient 
works out as an optional RpcClient, that we evaluate the next step of removing 
the sync RpcClient. When removed it is possible to move over all the 
AsyncProcess code and introduce a new async RpcClient interface. And then it 
would become possible to introduce a new optional Async api for Table etc.

> Adapt PayloadCarryingRpcController so it can also be used in async way
> ----------------------------------------------------------------------
>
>                 Key: HBASE-12668
>                 URL: https://issues.apache.org/jira/browse/HBASE-12668
>             Project: HBase
>          Issue Type: Improvement
>          Components: Client
>            Reporter: Jurriaan Mous
>            Assignee: Jurriaan Mous
>             Fix For: 1.0.0, 2.0.0
>
>         Attachments: HBASE-12668-V1.patch, HBASE-12668-V1.patch, 
> HBASE-12668.patch
>
>
> With the changes in HBASE-12597 it is possible to create a new RPC client. 
> But in all places the BlockingRpcChannel is called with a 
> PayloadCarryingRpcController. This controller is not usable in Async context 
> because some methods are not supported at the moment. (See 
> TimeLimitedRpcController for the methods that throw 
> UnsupportedOperationException)
> This issue is about implementing these methods so 
> PayloadCarryingRpcController can also be used in an async context and work 
> the same in a sync context.



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

Reply via email to