This is an automated email from the ASF dual-hosted git repository.

nanda pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new ff3ef5112e HDDS-12551. Replace dnsToUuidMap with dnsToDnIdMap in 
SCMNodeManager. (#8087)
ff3ef5112e is described below

commit ff3ef5112e6d7131f343bc653c44eeec650e675b
Author: Chia-Chuan Yu <[email protected]>
AuthorDate: Mon Mar 17 01:41:59 2025 +0800

    HDDS-12551. Replace dnsToUuidMap with dnsToDnIdMap in SCMNodeManager. 
(#8087)
---
 .../hadoop/hdds/scm/node/SCMNodeManager.java       | 60 ++++++++++++----------
 1 file changed, 33 insertions(+), 27 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/SCMNodeManager.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/SCMNodeManager.java
index ee6ad2b338..c155c2513b 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/SCMNodeManager.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/SCMNodeManager.java
@@ -53,6 +53,7 @@
 import org.apache.hadoop.hdds.HddsConfigKeys;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.protocol.DatanodeDetails;
+import org.apache.hadoop.hdds.protocol.DatanodeID;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeOperationalState;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeState;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos;
@@ -126,7 +127,7 @@ public class SCMNodeManager implements NodeManager {
   private final NetworkTopology clusterMap;
   private final Function<String, String> nodeResolver;
   private final boolean useHostname;
-  private final Map<String, Set<UUID>> dnsToUuidMap = new 
ConcurrentHashMap<>();
+  private final Map<String, Set<DatanodeID>> dnsToDnIdMap = new 
ConcurrentHashMap<>();
   private final int numPipelinesPerMetadataVolume;
   private final int heavyNodeCriteria;
   private final HDDSLayoutVersionManager scmLayoutVersionManager;
@@ -151,6 +152,7 @@ public class SCMNodeManager implements NodeManager {
    * Constructs SCM machine Manager.
    */
   public SCMNodeManager(
+
       OzoneConfiguration conf,
       SCMStorageConfig scmStorageConfig,
       EventPublisher eventPublisher,
@@ -409,7 +411,7 @@ public RegisteredCommand register(
       datanodeDetails.setNetworkLocation(networkLocation);
     }
 
-    final UUID uuid = datanodeDetails.getUuid();
+    final DatanodeID dnId = datanodeDetails.getID();
     if (!isNodeRegistered(datanodeDetails)) {
       try {
         clusterMap.add(datanodeDetails);
@@ -417,7 +419,7 @@ public RegisteredCommand register(
         // Check that datanode in nodeStateManager has topology parent set
         DatanodeDetails dn = nodeStateManager.getNode(datanodeDetails);
         Preconditions.checkState(dn.getParent() != null);
-        addToDnsToUuidMap(uuid, ipAddress, hostName);
+        addToDnsToDnIdMap(dnId, ipAddress, hostName);
         // Updating Node Report, as registration is successful
         processNodeReport(datanodeDetails, nodeReport);
         LOG.info("Registered datanode: {}", datanodeDetails.toDebugString());
@@ -435,8 +437,8 @@ public RegisteredCommand register(
       // Update datanode if it is registered but the ip or hostname changes
       try {
         final DatanodeInfo oldNode = nodeStateManager.getNode(datanodeDetails);
-        if (updateDnsToUuidMap(oldNode.getHostName(), oldNode.getIpAddress(),
-            hostName, ipAddress, uuid)) {
+        if (updateDnsToDnIdMap(oldNode.getHostName(), oldNode.getIpAddress(),
+            hostName, ipAddress, dnId)) {
           LOG.info("Updating datanode {} from {} to {}",
                   datanodeDetails.getUuidString(),
                   oldNode,
@@ -472,42 +474,42 @@ public RegisteredCommand register(
    * and each host can have multiple addresses,
    * this is a many to many mapping.
    *
-   * @param uuid the UUID of the registered node.
+   * @param datanodeID the DataNodeID of the registered node.
    * @param addresses hostname and/or IP of the node
    */
-  private synchronized void addToDnsToUuidMap(UUID uuid, String... addresses) {
+  private synchronized void addToDnsToDnIdMap(DatanodeID datanodeID, String... 
addresses) {
     for (String addr : addresses) {
       if (!Strings.isNullOrEmpty(addr)) {
-        dnsToUuidMap.computeIfAbsent(addr, k -> ConcurrentHashMap.newKeySet())
-            .add(uuid);
+        dnsToDnIdMap.computeIfAbsent(addr, k -> ConcurrentHashMap.newKeySet())
+            .add(datanodeID);
       }
     }
   }
 
-  private synchronized void removeFromDnsToUuidMap(UUID uuid, String address) {
+  private synchronized void removeFromDnsToDnIdMap(DatanodeID datanodeID, 
String address) {
     if (address != null) {
-      Set<UUID> dnSet = dnsToUuidMap.get(address);
-      if (dnSet != null && dnSet.remove(uuid) && dnSet.isEmpty()) {
-        dnsToUuidMap.remove(address);
+      Set<DatanodeID> dnSet = dnsToDnIdMap.get(address);
+      if (dnSet != null && dnSet.remove(datanodeID) && dnSet.isEmpty()) {
+        dnsToDnIdMap.remove(address);
       }
     }
   }
 
-  private boolean updateDnsToUuidMap(
+  private boolean updateDnsToDnIdMap(
       String oldHostName, String oldIpAddress,
       String newHostName, String newIpAddress,
-      UUID uuid) {
+      DatanodeID datanodeID) {
     final boolean ipChanged = !Objects.equals(oldIpAddress, newIpAddress);
     final boolean hostNameChanged = !Objects.equals(oldHostName, newHostName);
     if (ipChanged || hostNameChanged) {
       synchronized (this) {
         if (ipChanged) {
-          removeFromDnsToUuidMap(uuid, oldIpAddress);
-          addToDnsToUuidMap(uuid, newIpAddress);
+          removeFromDnsToDnIdMap(datanodeID, oldIpAddress);
+          addToDnsToDnIdMap(datanodeID, newIpAddress);
         }
         if (hostNameChanged) {
-          removeFromDnsToUuidMap(uuid, oldHostName);
-          addToDnsToUuidMap(uuid, newHostName);
+          removeFromDnsToDnIdMap(datanodeID, oldHostName);
+          addToDnsToDnIdMap(datanodeID, newHostName);
         }
       }
     }
@@ -1725,24 +1727,28 @@ public DatanodeDetails getNodeByUuid(UUID uuid) {
    */
   @Override
   public List<DatanodeDetails> getNodesByAddress(String address) {
+    List<DatanodeDetails> allNodes = getAllNodes();
     List<DatanodeDetails> results = new LinkedList<>();
     if (Strings.isNullOrEmpty(address)) {
       LOG.warn("address is null");
       return results;
     }
-    Set<UUID> uuids = dnsToUuidMap.get(address);
-    if (uuids == null) {
+    Set<DatanodeID> datanodeIDS = dnsToDnIdMap.get(address);
+    if (datanodeIDS == null) {
       LOG.debug("Cannot find node for address {}", address);
       return results;
     }
 
-    for (UUID uuid : uuids) {
+    datanodeIDS.forEach(datanodeID -> {
       try {
-        results.add(nodeStateManager.getNode(uuid));
-      } catch (NodeNotFoundException e) {
-        LOG.warn("Cannot find node for uuid {}", uuid);
+        List<DatanodeDetails> datanodeDetails = allNodes.stream().
+            filter(node -> node.getID().equals(datanodeID)).
+            collect(Collectors.toList());
+        results.addAll(datanodeDetails);
+      } catch (Exception e) {
+        LOG.warn("Error find node for DataNode ID {}", datanodeID);
       }
-    }
+    });
     return results;
   }
 
@@ -1845,7 +1851,7 @@ public void removeNode(DatanodeDetails datanodeDetails) 
throws NodeNotFoundExcep
           clusterMap.remove(datanodeDetails);
         }
         nodeStateManager.removeNode(datanodeDetails);
-        removeFromDnsToUuidMap(datanodeDetails.getUuid(), 
datanodeDetails.getIpAddress());
+        removeFromDnsToDnIdMap(datanodeDetails.getID(), 
datanodeDetails.getIpAddress());
         final List<SCMCommand<?>> cmdList = 
getCommandQueue(datanodeDetails.getUuid());
         LOG.info("Clearing command queue of size {} for DN {}", 
cmdList.size(), datanodeDetails);
       } else {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to