From 1360c7574adc5756ee432c5829d38351523c3f8e Mon Sep 17 00:00:00 2001 From: Viraj Jasani Date: Tue, 16 Jul 2024 05:08:41 -0800 Subject: [PATCH] HADOOP-19218 Avoid DNS lookup while creating IPC Connection object (#6916). Contributed by Viraj Jasani. Signed-off-by: Rushabh Shah Signed-off-by: He Xiaoqiao --- .../src/main/java/org/apache/hadoop/ipc/Server.java | 13 ++++--------- .../test/java/org/apache/hadoop/ipc/TestIPC.java | 2 +- .../test/java/org/apache/hadoop/ipc/TestRPC.java | 4 ++-- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java index a49b5ec692..0fb902a095 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java @@ -2034,11 +2034,7 @@ public class Connection { * Address to which the socket is connected to. */ private final InetAddress addr; - /** - * Client Host address from where the socket connection is being established to the Server. - */ - private final String hostName; - + IpcConnectionContextProto connectionContext; String protocolName; SaslServer saslServer; @@ -2081,12 +2077,9 @@ public Connection(SocketChannel channel, long lastContact, this.isOnAuxiliaryPort = isOnAuxiliaryPort; if (addr == null) { this.hostAddress = "*Unknown*"; - this.hostName = this.hostAddress; } else { // host IP address this.hostAddress = addr.getHostAddress(); - // host name for the IP address - this.hostName = addr.getHostName(); } this.remotePort = socket.getPort(); this.responseQueue = new LinkedList(); @@ -2102,7 +2095,7 @@ public Connection(SocketChannel channel, long lastContact, @Override public String toString() { - return hostName + ":" + remotePort + " / " + hostAddress + ":" + remotePort; + return hostAddress + ":" + remotePort; } boolean setShouldClose() { @@ -2516,6 +2509,7 @@ public int readAndProcess() throws IOException, InterruptedException { } if (!RpcConstants.HEADER.equals(dataLengthBuffer)) { + final String hostName = addr == null ? this.hostAddress : addr.getHostName(); LOG.warn("Incorrect RPC Header length from {}:{} / {}:{}. Expected: {}. Actual: {}", hostName, remotePort, hostAddress, remotePort, RpcConstants.HEADER, dataLengthBuffer); @@ -2523,6 +2517,7 @@ public int readAndProcess() throws IOException, InterruptedException { return -1; } if (version != CURRENT_VERSION) { + final String hostName = addr == null ? this.hostAddress : addr.getHostName(); //Warning is ok since this is not supposed to happen. LOG.warn("Version mismatch from {}:{} / {}:{}. " + "Expected version: {}. Actual version: {} ", hostName, diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestIPC.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestIPC.java index 7cfd65d482..9165c71eb4 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestIPC.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestIPC.java @@ -1177,7 +1177,7 @@ private static void callAndVerify(Server server, InetSocketAddress addr, Connection connection = server.getConnections()[0]; LOG.info("Connection is from: {}", connection); assertEquals( - "Connection string representation should include both IP address and Host name", 2, + "Connection string representation should include only IP address for healthy connection", 1, connection.toString().split(" / ").length); int serviceClass2 = connection.getServiceClass(); assertFalse(noChanged ^ serviceClass == serviceClass2); diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestRPC.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestRPC.java index 17f1f65261..bc72b6c126 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestRPC.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestRPC.java @@ -1941,8 +1941,8 @@ public RpcStatusProto getRpcStatusProto() { String connectionInfo = conns[0].toString(); LOG.info("Connection is from: {}", connectionInfo); assertEquals( - "Connection string representation should include both IP address and Host name", 2, - connectionInfo.split(" / ").length); + "Connection string representation should include only IP address for healthy " + + "connection", 1, connectionInfo.split(" / ").length); // verify whether the connection should have been reused. if (isDisconnected) { assertNotSame(reqName, lastConn, conns[0]);