[
https://issues.apache.org/jira/browse/HDFS-14162?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16728537#comment-16728537
]
Konstantin Shvachko commented on HDFS-14162:
--------------------------------------------
Looks like [~xkrogen]'s and [~csun]'s approaches are similar in creating
ClientProtocol(s) along with another one requested.
I think a cleaner way would be to allow proxies on multiple protocols. I don't
like the common pattern now in the code that different services instantiate a
separate proxy for each protocol they need. Like Balancer uses two protocols
{{ClientProtocol}} and {{NameNodeProtocol}} and creates a proxy for each of
them. It would be good to be able to declare
{code:java}
public interface BalancerProtocols extends NamenodeProtocol, ClientProtocol {}
{code}
And then call {{createProxy(conf, nameNodeUri, BalancerProtocols.class)}} to
get a combined proxy. We can do it now by defining
{{BalancerProtocols*TranslatorPB}} classes. But the translations are already
defined so they should just be combined into something like
{{CombinerProtocolTranslator}}, which would use individual translators for each
protocol that {{BalancerProtocols}} extends.
Then the translator protocols, in this case {{ClientNamenodeProtocolPB}} and
{{NamenodeProtocolPB}} could be combined into a single proxy by
{code:java}
Proxy.newProxyInstance(protocol.getClassLoader(),
new Class[]{ClientNamenodeProtocolPB.class, NamenodeProtocolPB.class},
invoker);
{code}
Currently all {{getProxy()}} methods in {{RpcEngine}} classes use only one
protocol class:
{code:java}
Proxy.newProxyInstance(protocol.getClassLoader(), new Class[]{protocol},
invoker)
{code}
which should be generalized for multiple protocols.
Hope this makes sense. It is a general improvement for Hadoop RPC. If we can
implement it we will be able to use it anywhere where proxies with multiple
protocols are needed. Recent examples include Balancer, Fsck,
NNThroughputBenchmark, and I've seen more cases.
> Balancer should work with ObserverNode
> --------------------------------------
>
> Key: HDFS-14162
> URL: https://issues.apache.org/jira/browse/HDFS-14162
> Project: Hadoop HDFS
> Issue Type: Sub-task
> Reporter: Konstantin Shvachko
> Priority: Major
> Attachments: HDFS-14162-HDFS-12943.wip0.patch,
> testBalancerWithObserver.patch
>
>
> Balancer provides a substantial RPC load on NameNode. It would be good to
> divert Balancer RPCs {{getBlocks()}}, etc. to ObserverNode. The main problem
> is that Balancer uses {{NamenodeProtocol}}, while ORPP currently supports
> only {{ClientProtocol}}.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]