You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by st...@apache.org on 2023/02/15 18:23:52 UTC
[hadoop] branch branch-3.3 updated: HADOOP-18628. IPC Server Connection should log host name before returning VersionMismatch error (#5385)
This is an automated email from the ASF dual-hosted git repository.
stevel pushed a commit to branch branch-3.3
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-3.3 by this push:
new 8c9c68c19e9 HADOOP-18628. IPC Server Connection should log host name before returning VersionMismatch error (#5385)
8c9c68c19e9 is described below
commit 8c9c68c19e90b49dea3b490ac3b053264fda7133
Author: Viraj Jasani <vj...@apache.org>
AuthorDate: Wed Feb 15 10:23:44 2023 -0800
HADOOP-18628. IPC Server Connection should log host name before returning VersionMismatch error (#5385)
Contributed by Viraj Jasani
---
.../main/java/org/apache/hadoop/ipc/Server.java | 42 +++++++++++++++-------
.../test/java/org/apache/hadoop/ipc/TestIPC.java | 4 +++
.../test/java/org/apache/hadoop/ipc/TestRPC.java | 5 +++
3 files changed, 39 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 951d5c0a4df..8a16423af5a 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
@@ -1871,11 +1871,26 @@ public abstract class Server {
private long lastContact;
private int dataLength;
private Socket socket;
+
// Cache the remote host & port info so that even if the socket is
// disconnected, we can say where it used to connect to.
- private String hostAddress;
- private int remotePort;
- private InetAddress addr;
+
+ /**
+ * Client Host IP address from where the socket connection is being established to the Server.
+ */
+ private final String hostAddress;
+ /**
+ * Client remote port used for the given socket connection.
+ */
+ private final int remotePort;
+ /**
+ * 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;
@@ -1919,8 +1934,12 @@ public abstract class Server {
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<RpcCall>();
@@ -1936,7 +1955,7 @@ public abstract class Server {
@Override
public String toString() {
- return getHostAddress() + ":" + remotePort;
+ return hostName + ":" + remotePort + " / " + hostAddress + ":" + remotePort;
}
boolean setShouldClose() {
@@ -2338,19 +2357,18 @@ public abstract class Server {
return -1;
}
- if(!RpcConstants.HEADER.equals(dataLengthBuffer)) {
- LOG.warn("Incorrect RPC Header length from {}:{} "
- + "expected length: {} got length: {}",
- hostAddress, remotePort, RpcConstants.HEADER, dataLengthBuffer);
+ if (!RpcConstants.HEADER.equals(dataLengthBuffer)) {
+ LOG.warn("Incorrect RPC Header length from {}:{} / {}:{}. Expected: {}. Actual: {}",
+ hostName, remotePort, hostAddress, remotePort, RpcConstants.HEADER,
+ dataLengthBuffer);
setupBadVersionResponse(version);
return -1;
}
if (version != CURRENT_VERSION) {
//Warning is ok since this is not supposed to happen.
- LOG.warn("Version mismatch from " +
- hostAddress + ":" + remotePort +
- " got version " + version +
- " expected version " + CURRENT_VERSION);
+ LOG.warn("Version mismatch from {}:{} / {}:{}. "
+ + "Expected version: {}. Actual version: {} ", hostName,
+ remotePort, hostAddress, remotePort, CURRENT_VERSION, version);
setupBadVersionResponse(version);
return -1;
}
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 c32f7414495..8950e1f6138 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
@@ -1170,6 +1170,10 @@ public class TestIPC {
call(client, addr, serviceClass, conf);
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.toString().split(" / ").length);
int serviceClass2 = connection.getServiceClass();
assertFalse(noChanged ^ serviceClass == serviceClass2);
client.stop();
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 7e1c6a12ccd..fd1a8ed3f8c 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
@@ -1827,6 +1827,11 @@ public class TestRPC extends TestRpcBase {
// if it wasn't fatal, verify there's only one open connection.
Connection[] conns = server.getConnections();
assertEquals(reqName, 1, conns.length);
+ 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);
// verify whether the connection should have been reused.
if (isDisconnected) {
assertNotSame(reqName, lastConn, conns[0]);
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org