[ https://issues.apache.org/jira/browse/HDFS-14116?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Konstantin Shvachko reopened HDFS-14116: ---------------------------------------- Reopening. Yes I was looking at this patch and it is as [~vagarychen] said. The {{AlignmentContext}} is set in {{ClientHAProfyFactory}}. It is sort of the source of truth there. ORPP needs that to function properly. NNThroughputBenchmark uses in the end {{NameNodePoxyFactory}} to create essentially a non-ha proxy for a non-ClientProtocol interface. So it should use {{createNonHAProxy()}} rather than building ORPP. So I propose to revert the patch. And let's think how we should fix it. We should make {{NameNodeProxiesClient.createFailoverProxyProvider()}} return null if somebody tries to instantiate ORPP with non-ClientProtocol interface. Then things should fall in place. > ObserverReadProxyProvider should work with protocols other than ClientProtocol > ------------------------------------------------------------------------------ > > 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 > Assignee: Chao Sun > Priority: Major > Fix For: HDFS-12943 > > Attachments: HDFS-14116-HDFS-12943.000.patch, > HDFS-14116-HDFS-12943.001.patch, HDFS-14116-HDFS-12943.002.patch, > HDFS-14116-HDFS-12943.003.patch, HDFS-14116-HDFS-12943.004.patch > > > 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: hdfs-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org