From 2bd72b9a18ea6630f64bc9dfffc268bb5171a4f4 Mon Sep 17 00:00:00 2001 From: liuwenjing3 Date: Wed, 5 Mar 2025 16:41:06 +0800 Subject: [PATCH] HDFS-17752. Host2DatanodeMap will not update when re-register a node with a different hostname --- .../server/blockmanagement/DatanodeManager.java | 9 +++++++++ .../blockmanagement/TestDatanodeManager.java | 15 +++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java index bcc77f56db6ae..9299678d68850 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java @@ -703,6 +703,11 @@ public DatanodeDescriptor getDatanodeByHost(final String host) { return host2DatanodeMap.getDatanodeByHost(host); } + /** @return the datanode descriptor for the host. */ + public DatanodeDescriptor getDatanodeByHostName(final String hostname) { + return host2DatanodeMap.getDataNodeByHostName(hostname); + } + /** @return the datanode descriptor for the host. */ public DatanodeDescriptor getDatanodeByXferAddr(String host, int xferPort) { return host2DatanodeMap.getDatanodeByXferAddr(host, xferPort); @@ -1236,6 +1241,10 @@ nodes with its data cleared (or user can just remove the StorageID + " is replaced by " + nodeReg + " with the same storageID " + nodeReg.getDatanodeUuid()); } + + if (!updateHost2DatanodeMap) { + updateHost2DatanodeMap = !nodeS.getHostName().equals(nodeReg.getHostName()); + } boolean success = false; try { diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestDatanodeManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestDatanodeManager.java index d881f533adbdf..0714e6b03e421 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestDatanodeManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestDatanodeManager.java @@ -174,6 +174,21 @@ public void testHost2NodeMapCorrectAfterReregister() assertNull("should be no node with old ip", dm.getDatanodeByHost(ipOld)); assertNotNull("should be a node with new ip", dm.getDatanodeByHost(ipNew)); + + storageID = "someStorageID2"; + String hostnameOld = "someHostNameOld" + storageID; + String hostnameNew = "someHostNameNew" + storageID; + + dm.registerDatanode(new DatanodeRegistration( + new DatanodeID("ip", hostnameOld, storageID, 9000, 0, 0, 0), + null, null, "version")); + + dm.registerDatanode(new DatanodeRegistration( + new DatanodeID("ip", hostnameNew, storageID, 9000, 0, 0, 0), + null, null, "version")); + + assertNull("should be no node with old hostname", dm.getDatanodeByHostName(hostnameOld)); + assertNotNull("should be a node with new hostname", dm.getDatanodeByHostName(hostnameNew)); } /**