Erik Krogen created HDFS-14442: ---------------------------------- Summary: 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
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 (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: hdfs-dev-unsubscr...@hadoop.apache.org For additional commands, e-mail: hdfs-dev-h...@hadoop.apache.org