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

sammichen 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 23e350b238 HDDS-10869. SCMNodeManager#getUsageInfo memory occupancy 
optimization (#6737)
23e350b238 is described below

commit 23e350b2385014fa15a02a9ff7c359a5f15ae5e9
Author: hao guo <[email protected]>
AuthorDate: Thu Jun 6 11:01:30 2024 +0800

    HDDS-10869. SCMNodeManager#getUsageInfo memory occupancy optimization 
(#6737)
---
 .../java/org/apache/hadoop/hdds/scm/node/NodeStateManager.java |  5 +++++
 .../java/org/apache/hadoop/hdds/scm/node/SCMNodeManager.java   |  8 ++++++--
 .../org/apache/hadoop/hdds/scm/node/states/NodeStateMap.java   | 10 ++++++++++
 .../java/org/apache/hadoop/ozone/recon/api/NodeEndpoint.java   |  4 +---
 4 files changed, 22 insertions(+), 5 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 4543a49b41..3307a292dc 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
@@ -682,6 +682,11 @@ public class NodeStateManager implements Runnable, 
Closeable {
     return nodeStateMap.getContainers(uuid);
   }
 
+  public int getContainerCount(UUID uuid)
+      throws NodeNotFoundException {
+    return nodeStateMap.getContainerCount(uuid);
+  }
+
   /**
    * Move Stale or Dead node to healthy if we got a heartbeat from them.
    * Move healthy nodes to stale nodes if it is needed.
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 3790214f52..818e182632 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
@@ -980,8 +980,7 @@ public class SCMNodeManager implements NodeManager {
     SCMNodeStat stat = getNodeStatInternal(dn);
     DatanodeUsageInfo usageInfo = new DatanodeUsageInfo(dn, stat);
     try {
-      int containerCount = getContainers(dn).size();
-      usageInfo.setContainerCount(containerCount);
+      usageInfo.setContainerCount(getContainerCount(dn));
     } catch (NodeNotFoundException ex) {
       LOG.error("Unknown datanode {}.", dn, ex);
     }
@@ -1458,6 +1457,11 @@ public class SCMNodeManager implements NodeManager {
     return nodeStateManager.getContainers(datanodeDetails.getUuid());
   }
 
+  public int getContainerCount(DatanodeDetails datanodeDetails)
+      throws NodeNotFoundException {
+    return nodeStateManager.getContainerCount(datanodeDetails.getUuid());
+  }
+
   @Override
   public void addDatanodeCommand(UUID dnId, SCMCommand command) {
     writeLock().lock();
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/states/NodeStateMap.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/states/NodeStateMap.java
index e8843fa21e..1dcdc17c90 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/states/NodeStateMap.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/states/NodeStateMap.java
@@ -378,6 +378,16 @@ public class NodeStateMap {
     }
   }
 
+  public int getContainerCount(UUID uuid) throws NodeNotFoundException {
+    lock.readLock().lock();
+    try {
+      checkIfNodeExist(uuid);
+      return nodeToContainer.get(uuid).size();
+    } finally {
+      lock.readLock().unlock();
+    }
+  }
+
   public void removeContainer(UUID uuid, ContainerID containerID) throws
       NodeNotFoundException {
     lock.writeLock().lock();
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/NodeEndpoint.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/NodeEndpoint.java
index a0bcfd3025..478b92fa81 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/NodeEndpoint.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/NodeEndpoint.java
@@ -152,9 +152,7 @@ public class NodeEndpoint {
         }
       });
       try {
-        Set<ContainerID> allContainers = nodeManager.getContainers(datanode);
-
-        builder.withContainers(allContainers.size());
+        builder.withContainers(nodeManager.getContainerCount(datanode));
         builder.withOpenContainers(openContainers.get());
       } catch (NodeNotFoundException ex) {
         LOG.warn("Cannot get containers, datanode {} not found.",


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

Reply via email to