[ 
https://issues.apache.org/jira/browse/HDFS-14116?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16723327#comment-16723327
 ] 

Chen Liang commented on HDFS-14116:
-----------------------------------

I had an offline discussion with [~shv]. So it looks like we were trying to 
resolve the cast exception in this Jira and ended up repurposing to extend 
ORFPP to support non-client-protocol. This may not be the right change because 
by design, Observer is meant to only for client protocol operations and nothing 
else. We do not design ORFPP for any other protocol so far to this point. So it 
might actually be the right thing to just throw exception if ORFPP is used for 
any protocol other than client protocol, and make changes to 
NNThroughputBenmark like in the v000 patch.

> 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

Reply via email to