[
https://issues.apache.org/jira/browse/HDFS-14116?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16703877#comment-16703877
]
Chen Liang commented on HDFS-14116:
-----------------------------------
Thanks [~csun]! Yeah I can another look later. Posting error stack trace when
running NNThroughput here for record:
{code}
Caused by: java.lang.ClassCastException:
org.apache.hadoop.hdfs.server.namenode.ha.NameNodeHAProxyFactory cannot be cast
to org.apache.hadoop.hdfs.server.namenode.ha.ClientHAProxyFactory
at
org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProvider.<init>(ObserverReadProxyProvider.java:118)
at
org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProviderWithIPFailover.<init>(ObserverReadProxyProviderWithIPFailover.java:99)
at
org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProviderWithIPFailover.<init>(ObserverReadProxyProviderWithIPFailover.java:86)
... 12 more
{code}
{code}
Exception in thread "main" java.io.IOException: Couldn't create proxy provider
class
org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProviderWithIPFailover
at
org.apache.hadoop.hdfs.NameNodeProxiesClient.createFailoverProxyProvider(NameNodeProxiesClient.java:261)
at
org.apache.hadoop.hdfs.NameNodeProxies.createProxy(NameNodeProxies.java:115)
at
org.apache.hadoop.hdfs.DFSTestUtil.getRefreshUserMappingsProtocolProxy(DFSTestUtil.java:2022)
at
org.apache.hadoop.hdfs.server.namenode.NNThroughputBenchmark.run(NNThroughputBenchmark.java:1524)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:90)
at
org.apache.hadoop.hdfs.server.namenode.NNThroughputBenchmark.runBenchmark(NNThroughputBenchmark.java:1432)
at
org.apache.hadoop.hdfs.server.namenode.NNThroughputBenchmark.main(NNThroughputBenchmark.java:1552)
{code}
> Fix a potential class cast error in ObserverReadProxyProvider
> -------------------------------------------------------------
>
> Key: HDFS-14116
> URL: https://issues.apache.org/jira/browse/HDFS-14116
> Project: Hadoop HDFS
> Issue Type: Sub-task
> Components: hdfs-client
> Reporter: Chen Liang
> Priority: Major
>
> Currently in {{ObserverReadProxyProvider}} constructor there is this line
> {code}
> ((ClientHAProxyFactory<T>) factory).setAlignmentContext(alignmentContext);
> {code}
> This could potentially cause failure, because it is possible that factory can
> not be casted here. Specifically,
> {{NameNodeProxiesClient.createFailoverProxyProvider}} is where the
> constructor will be called, and there are two paths that could call into this:
> (1).{{NameNodeProxies.createProxy}}
> (2).{{NameNodeProxiesClient.createFailoverProxyProvider}}
> (2) works fine because it always uses {{ClientHAProxyFactory}} but (1) uses
> {{NameNodeHAProxyFactory}} which can not be casted to
> {{ClientHAProxyFactory}}, this happens when, for example, running
> NNThroughputBenmarck. To fix this we can at least:
> 1. introduce setAlignmentContext to HAProxyFactory which is the parent of
> both ClientHAProxyFactory and NameNodeHAProxyFactory OR
> 2. only setAlignmentContext when it is ClientHAProxyFactory by, say, having a
> if check with reflection.
> Depending on whether it make sense to have alignment context for the case (1)
> calling code paths.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]