[ 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)