[
https://issues.apache.org/jira/browse/HBASE-12597?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jurriaan Mous updated HBASE-12597:
----------------------------------
Attachment: HBASE-12597-v1.patch
New patch. I have adapted your suggestions.
bq. Do we need a start in the Interface? Or does calling
createBlockingRpcChannel serve this purpose?
Yes createBlockingRpcChannel serves this purpose.
Now I have two questions about the next steps:
1. I would like to make the RpcClient configurable. I want to inspire its
implementation on the ConnectionFactory createConnection method. Is it ok to
use "hbase.ipc.client.impl" as the setting name? And to embed its
implementation in a RpcClientFactory class?
2. I would like to abstract some basic implementation details for RpcClient
like the config settings. Basically everything in the constructor for the
implementation, its parameters, config name constants and static config
setters. I would like to call it RpcClientAdapter and let RpcClientImpl
implement it. Is this ok? This would save duplication in my own AsyncRpcClient.
> 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.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)