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

Ravuri Sushma sree commented on HDFS-14442:
-------------------------------------------

[~xkrogen], Thank you so much for your valuable suggestions. 

I have uploaded a patch following up the first approach.

Can you please review 

> Disagreement between HAUtil.getAddressOfActive and 
> RpcInvocationHandler.getConnectionId
> ---------------------------------------------------------------------------------------
>
>                 Key: HDFS-14442
>                 URL: https://issues.apache.org/jira/browse/HDFS-14442
>             Project: Hadoop HDFS
>          Issue Type: Bug
>    Affects Versions: 3.3.0
>            Reporter: Erik Krogen
>            Priority: Major
>         Attachments: HDFS-14442.001.patch
>
>
> While working on HDFS-14245, we noticed a discrepancy in some proxy-handling 
> code.
> The description of {{RpcInvocationHandler.getConnectionId()}} states:
> {code}
>   /**
>    * Returns the connection id associated with the InvocationHandler instance.
>    * @return ConnectionId
>    */
>   ConnectionId getConnectionId();
> {code}
> It does not make any claims about whether this connection ID will be an 
> active proxy or not. Yet in {{HAUtil}} we have:
> {code}
>   /**
>    * Get the internet address of the currently-active NN. This should rarely 
> be
>    * used, since callers of this method who connect directly to the NN using 
> the
>    * resulting InetSocketAddress will not be able to connect to the active NN 
> if
>    * a failover were to occur after this method has been called.
>    * 
>    * @param fs the file system to get the active address of.
>    * @return the internet address of the currently-active NN.
>    * @throws IOException if an error occurs while resolving the active NN.
>    */
>   public static InetSocketAddress getAddressOfActive(FileSystem fs)
>       throws IOException {
>     if (!(fs instanceof DistributedFileSystem)) {
>       throw new IllegalArgumentException("FileSystem " + fs + " is not a 
> DFS.");
>     }
>     // force client address resolution.
>     fs.exists(new Path("/"));
>     DistributedFileSystem dfs = (DistributedFileSystem) fs;
>     DFSClient dfsClient = dfs.getClient();
>     return RPC.getServerAddress(dfsClient.getNamenode());
>   }
> {code}
> Where the call {{RPC.getServerAddress()}} eventually terminates into 
> {{RpcInvocationHandler#getConnectionId()}}, via {{RPC.getServerAddress()}} -> 
> {{RPC.getConnectionIdForProxy()}} -> 
> {{RpcInvocationHandler#getConnectionId()}}. {{HAUtil}} appears to be making 
> an incorrect assumption that {{RpcInvocationHandler}} will necessarily return 
> an _active_ connection ID. {{ObserverReadProxyProvider}} demonstrates a 
> counter-example to this, since the current connection ID may be pointing at, 
> for example, an Observer NameNode.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
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