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

adoroszlai 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 d66d15fbea HDDS-8854. Avoid unnecessary DatanodeDetails creation for 
NodeStateManager lookup (#4925)
d66d15fbea is described below

commit d66d15fbea56b1e1d3c9dd5c2c55707bb34dd24d
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Fri Jun 23 08:47:24 2023 +0200

    HDDS-8854. Avoid unnecessary DatanodeDetails creation for NodeStateManager 
lookup (#4925)
---
 .../hadoop/hdds/scm/node/NodeStateManager.java     |  7 ++++-
 .../hadoop/hdds/scm/node/SCMNodeManager.java       | 30 +++++++++-------------
 2 files changed, 18 insertions(+), 19 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeStateManager.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeStateManager.java
index b8a83e20b9..3366c3e5f1 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeStateManager.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeStateManager.java
@@ -374,7 +374,12 @@ public class NodeStateManager implements Runnable, 
Closeable {
    */
   public DatanodeInfo getNode(DatanodeDetails datanodeDetails)
       throws NodeNotFoundException {
-    return nodeStateMap.getNodeInfo(datanodeDetails.getUuid());
+    return getNode(datanodeDetails.getUuid());
+  }
+
+  public DatanodeInfo getNode(UUID uuid)
+      throws NodeNotFoundException {
+    return nodeStateMap.getNodeInfo(uuid);
   }
 
   /**
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 21b639ca8a..3466fa4234 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
@@ -124,8 +124,7 @@ public class SCMNodeManager implements NodeManager {
   private final NetworkTopology clusterMap;
   private final DNSToSwitchMapping dnsToSwitchMapping;
   private final boolean useHostname;
-  private final ConcurrentHashMap<String, Set<String>> dnsToUuidMap =
-      new ConcurrentHashMap<>();
+  private final Map<String, Set<UUID>> dnsToUuidMap = new 
ConcurrentHashMap<>();
   private final int numPipelinesPerMetadataVolume;
   private final int heavyNodeCriteria;
   private final HDDSLayoutVersionManager scmLayoutVersionManager;
@@ -400,7 +399,7 @@ public class SCMNodeManager implements NodeManager {
         // Check that datanode in nodeStateManager has topology parent set
         DatanodeDetails dn = nodeStateManager.getNode(datanodeDetails);
         Preconditions.checkState(dn.getParent() != null);
-        addToDnsToUuidMap(dnsName, datanodeDetails.getUuidString());
+        addToDnsToUuidMap(dnsName, datanodeDetails.getUuid());
         // Updating Node Report, as registration is successful
         processNodeReport(datanodeDetails, nodeReport);
         LOG.info("Registered Data node : {}", datanodeDetails.toDebugString());
@@ -434,9 +433,7 @@ public class SCMNodeManager implements NodeManager {
           } else {
             oldDnsName = datanodeInfo.getIpAddress();
           }
-          updateDnsToUuidMap(oldDnsName,
-                  dnsName,
-                  datanodeDetails.getUuidString());
+          updateDnsToUuidMap(oldDnsName, dnsName, datanodeDetails.getUuid());
 
           nodeStateManager.updateNode(datanodeDetails, layoutInfo);
           DatanodeDetails dn = nodeStateManager.getNode(datanodeDetails);
@@ -466,20 +463,20 @@ public class SCMNodeManager implements NodeManager {
    * @param addr the hostname or IP of the node
    * @param uuid the UUID of the registered node.
    */
-  private synchronized void addToDnsToUuidMap(String addr, String uuid) {
+  private synchronized void addToDnsToUuidMap(String addr, UUID uuid) {
     dnsToUuidMap.computeIfAbsent(addr, k -> ConcurrentHashMap.newKeySet())
         .add(uuid);
   }
 
-  private synchronized void removeFromDnsToUuidMap(String addr, String uuid) {
-    Set<String> dnSet = dnsToUuidMap.get(addr);
+  private synchronized void removeFromDnsToUuidMap(String addr, UUID uuid) {
+    Set<UUID> dnSet = dnsToUuidMap.get(addr);
     if (dnSet != null && dnSet.remove(uuid) && dnSet.isEmpty()) {
       dnsToUuidMap.remove(addr);
     }
   }
 
   private synchronized void updateDnsToUuidMap(
-      String oldDnsName, String newDnsName, String uuid) {
+      String oldDnsName, String newDnsName, UUID uuid) {
     Preconditions.checkNotNull(oldDnsName, "old address == null");
     Preconditions.checkNotNull(newDnsName, "new address == null");
     if (!oldDnsName.equals(newDnsName)) {
@@ -976,7 +973,7 @@ public class SCMNodeManager implements NodeManager {
       return new SCMNodeStat(capacity, used, remaining);
     } catch (NodeNotFoundException e) {
       LOG.warn("Cannot generate NodeStat, datanode {} not found.",
-          datanodeDetails.getUuid());
+          datanodeDetails.getUuidString());
       return null;
     }
   }
@@ -1350,8 +1347,7 @@ public class SCMNodeManager implements NodeManager {
     }
 
     try {
-      return nodeStateManager.getNode(
-          DatanodeDetails.newBuilder().setUuid(uuid).build());
+      return nodeStateManager.getNode(uuid);
     } catch (NodeNotFoundException e) {
       LOG.warn("Cannot find node for uuid {}", uuid);
       return null;
@@ -1372,17 +1368,15 @@ public class SCMNodeManager implements NodeManager {
       LOG.warn("address is null");
       return results;
     }
-    Set<String> uuids = dnsToUuidMap.get(address);
+    Set<UUID> uuids = dnsToUuidMap.get(address);
     if (uuids == null) {
       LOG.warn("Cannot find node for address {}", address);
       return results;
     }
 
-    for (String uuid : uuids) {
-      DatanodeDetails temp = DatanodeDetails.newBuilder()
-          .setUuid(UUID.fromString(uuid)).build();
+    for (UUID uuid : uuids) {
       try {
-        results.add(nodeStateManager.getNode(temp));
+        results.add(nodeStateManager.getNode(uuid));
       } catch (NodeNotFoundException e) {
         LOG.warn("Cannot find node for uuid {}", uuid);
       }


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

Reply via email to