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

szetszwo 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 b68b94cc08 HDDS-12617. Use DatanodeID as keys in NodeStateMap. (#8100)
b68b94cc08 is described below

commit b68b94cc0800cfd7cd8a66a9146cc1ff11a31e4a
Author: Tsz-Wo Nicholas Sze <[email protected]>
AuthorDate: Tue Mar 18 09:49:52 2025 -0700

    HDDS-12617. Use DatanodeID as keys in NodeStateMap. (#8100)
---
 .../hadoop/hdds/scm/node/NodeStateManager.java     |  69 +++++------
 .../hadoop/hdds/scm/node/SCMNodeManager.java       |  15 ++-
 .../scm/node/states/NodeNotFoundException.java     |  13 +-
 .../hadoop/hdds/scm/node/states/NodeStateMap.java  | 138 +++++++--------------
 .../hadoop/hdds/scm/container/MockNodeManager.java |   4 +-
 .../hdds/scm/container/SimpleMockNodeManager.java  |   2 +-
 .../replication/TestReplicationManagerUtil.java    |   4 +-
 .../hdds/scm/node/TestContainerPlacement.java      |   5 +-
 .../hdds/scm/node/TestNodeDecommissionManager.java |   2 +-
 .../hadoop/hdds/scm/node/TestNodeStateManager.java |  10 +-
 .../hdds/scm/node/states/TestNodeStateMap.java     |  27 ++--
 .../testutils/ReplicationNodeManagerMock.java      |   2 +-
 .../hadoop/ozone/recon/api/NodeEndpoint.java       |   2 +-
 13 files changed, 116 insertions(+), 177 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 1bcd2d2f3c..46f13e66c6 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
@@ -43,6 +43,7 @@
 import java.util.stream.Collectors;
 import org.apache.hadoop.hdds.conf.ConfigurationSource;
 import org.apache.hadoop.hdds.protocol.DatanodeDetails;
+import org.apache.hadoop.hdds.protocol.DatanodeID;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeOperationalState;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeState;
@@ -309,12 +310,11 @@ public void addNode(DatanodeDetails datanodeDetails,
       LayoutVersionProto layoutInfo) throws NodeAlreadyExistsException {
     NodeStatus newNodeStatus = newNodeStatus(datanodeDetails, layoutInfo);
     nodeStateMap.addNode(datanodeDetails, newNodeStatus, layoutInfo);
-    UUID dnID = datanodeDetails.getUuid();
     try {
       updateLastKnownLayoutVersion(datanodeDetails, layoutInfo);
     } catch (NodeNotFoundException ex) {
-      LOG.error("Inconsistent NodeStateMap! Datanode with ID {} was " +
-          "added but not found in  map: {}", dnID, nodeStateMap);
+      throw new IllegalStateException("Inconsistent NodeStateMap! Datanode "
+          + datanodeDetails.getID() + " was added but not found in map: " + 
nodeStateMap);
     }
   }
 
@@ -374,12 +374,11 @@ public int getPipelinesCount(DatanodeDetails 
datanodeDetails) {
    */
   public DatanodeInfo getNode(DatanodeDetails datanodeDetails)
       throws NodeNotFoundException {
-    return getNode(datanodeDetails.getUuid());
+    return getNode(datanodeDetails.getID());
   }
 
-  public DatanodeInfo getNode(UUID uuid)
-      throws NodeNotFoundException {
-    return nodeStateMap.getNodeInfo(uuid);
+  public DatanodeInfo getNode(DatanodeID datanodeID) throws 
NodeNotFoundException {
+    return nodeStateMap.getNodeInfo(datanodeID);
   }
 
   /**
@@ -389,7 +388,7 @@ public DatanodeInfo getNode(UUID uuid)
    */
   public void updateLastHeartbeatTime(DatanodeDetails datanodeDetails)
       throws NodeNotFoundException {
-    nodeStateMap.getNodeInfo(datanodeDetails.getUuid())
+    nodeStateMap.getNodeInfo(datanodeDetails.getID())
         .updateLastHeartbeatTime();
   }
 
@@ -403,7 +402,7 @@ public void updateLastHeartbeatTime(DatanodeDetails 
datanodeDetails)
   public void updateLastKnownLayoutVersion(DatanodeDetails datanodeDetails,
                                       LayoutVersionProto layoutInfo)
       throws NodeNotFoundException {
-    nodeStateMap.getNodeInfo(datanodeDetails.getUuid())
+    nodeStateMap.getNodeInfo(datanodeDetails.getID())
         .updateLastKnownLayoutVersion(layoutInfo);
   }
 
@@ -417,8 +416,7 @@ public void updateLastKnownLayoutVersion(DatanodeDetails 
datanodeDetails,
   public void updateNode(DatanodeDetails datanodeDetails,
                          LayoutVersionProto layoutInfo)
           throws NodeNotFoundException {
-    DatanodeInfo datanodeInfo =
-            nodeStateMap.getNodeInfo(datanodeDetails.getUuid());
+    final DatanodeInfo datanodeInfo = 
nodeStateMap.getNodeInfo(datanodeDetails.getID());
     NodeStatus newNodeStatus = newNodeStatus(datanodeDetails, layoutInfo);
     LOG.info("updating node {} from {} to {} with status {}",
             datanodeDetails.getUuidString(),
@@ -440,7 +438,7 @@ public void updateNode(DatanodeDetails datanodeDetails,
    */
   public NodeStatus getNodeStatus(DatanodeDetails datanodeDetails)
       throws NodeNotFoundException {
-    return nodeStateMap.getNodeStatus(datanodeDetails.getUuid());
+    return nodeStateMap.getNodeStatus(datanodeDetails.getID());
   }
 
   /**
@@ -582,12 +580,12 @@ public void setNodeOperationalState(DatanodeDetails dn,
   public void setNodeOperationalState(DatanodeDetails dn,
       NodeOperationalState newState,
       long stateExpiryEpochSec)  throws NodeNotFoundException {
-    DatanodeInfo dni = nodeStateMap.getNodeInfo(dn.getUuid());
+    final DatanodeID id = dn.getID();
+    final DatanodeInfo dni = nodeStateMap.getNodeInfo(id);
     NodeStatus oldStatus = dni.getNodeStatus();
     if (oldStatus.getOperationalState() != newState ||
         oldStatus.getOpStateExpiryEpochSeconds() != stateExpiryEpochSec) {
-      nodeStateMap.updateNodeOperationalState(
-          dn.getUuid(), newState, stateExpiryEpochSec);
+      nodeStateMap.updateNodeOperationalState(id, newState, 
stateExpiryEpochSec);
       // This will trigger an event based on the nodes health when the
       // operational state changes. Eg a node that was IN_MAINTENANCE goes
       // to IN_SERVICE + HEALTHY. This will trigger the HEALTHY node event to
@@ -680,58 +678,49 @@ public void removePipeline(Pipeline pipeline) {
 
   /**
    * Adds the given container to the specified datanode.
-   *
-   * @param uuid - datanode uuid
-   * @param containerId - containerID
    * @throws NodeNotFoundException - if datanode is not known. For new datanode
    *                        use addDatanodeInContainerMap call.
    */
-  public void addContainer(final UUID uuid,
+  public void addContainer(final DatanodeID datanodeID,
                            final ContainerID containerId)
       throws NodeNotFoundException {
-    nodeStateMap.addContainer(uuid, containerId);
+    nodeStateMap.addContainer(datanodeID, containerId);
   }
 
   /**
    * Removes the given container from the specified datanode.
-   *
-   * @param uuid - datanode uuid
-   * @param containerId - containerID
    * @throws NodeNotFoundException - if datanode is not known. For new datanode
    *                        use addDatanodeInContainerMap call.
    */
-  public void removeContainer(final UUID uuid,
+  public void removeContainer(final DatanodeID datanodeID,
                            final ContainerID containerId)
       throws NodeNotFoundException {
-    nodeStateMap.removeContainer(uuid, containerId);
+    nodeStateMap.removeContainer(datanodeID, containerId);
   }
 
   /**
    * Update set of containers available on a datanode.
-   * @param uuid - DatanodeID
-   * @param containerIds - Set of containerIDs
    * @throws NodeNotFoundException - if datanode is not known.
    */
-  public void setContainers(UUID uuid, Set<ContainerID> containerIds)
+  public void setContainers(DatanodeID datanodeID, Set<ContainerID> 
containerIds)
       throws NodeNotFoundException {
-    nodeStateMap.setContainers(uuid, containerIds);
+    nodeStateMap.setContainers(datanodeID, containerIds);
   }
 
   /**
    * Return set of containerIDs available on a datanode. This is a copy of the
    * set which resides inside NodeStateMap and hence can be modified without
    * synchronization or side effects.
-   * @param uuid - DatanodeID
    * @return - set of containerIDs
    */
-  public Set<ContainerID> getContainers(UUID uuid)
+  public Set<ContainerID> getContainers(DatanodeID datanodeID)
       throws NodeNotFoundException {
-    return nodeStateMap.getContainers(uuid);
+    return nodeStateMap.getContainers(datanodeID);
   }
 
-  public int getContainerCount(UUID uuid)
+  public int getContainerCount(DatanodeID datanodeID)
       throws NodeNotFoundException {
-    return nodeStateMap.getContainerCount(uuid);
+    return nodeStateMap.getContainerCount(datanodeID);
   }
 
   /**
@@ -792,7 +781,7 @@ public synchronized void forceNodesToHealthyReadOnly() {
     try {
       List<DatanodeInfo> nodes = nodeStateMap.getDatanodeInfos(null, HEALTHY);
       for (DatanodeInfo node : nodes) {
-        nodeStateMap.updateNodeHealthState(node.getUuid(),
+        nodeStateMap.updateNodeHealthState(node.getID(),
             HEALTHY_READONLY);
         if (state2EventMap.containsKey(HEALTHY_READONLY)) {
           // At this point pipeline creation is already frozen and the node's
@@ -860,7 +849,7 @@ public synchronized void checkNodesHealth() {
 
     try {
       for (DatanodeInfo node : nodeStateMap.getAllDatanodeInfos()) {
-        NodeStatus status = nodeStateMap.getNodeStatus(node.getUuid());
+        NodeStatus status = nodeStateMap.getNodeStatus(node.getID());
         switch (status.getHealth()) {
         case HEALTHY:
           updateNodeLayoutVersionState(node, layoutMisMatchCondition, status,
@@ -967,7 +956,7 @@ private void updateNodeState(DatanodeInfo node, 
Predicate<Long> condition,
         NodeState newHealthState = nodeHealthSM.
             getNextState(status.getHealth(), lifeCycleEvent);
         NodeStatus newStatus =
-            nodeStateMap.updateNodeHealthState(node.getUuid(), newHealthState);
+            nodeStateMap.updateNodeHealthState(node.getID(), newHealthState);
         fireHealthStateEvent(newStatus.getHealth(), node);
       }
     } catch (InvalidStateTransitionException e) {
@@ -1006,7 +995,7 @@ private void updateNodeLayoutVersionState(DatanodeInfo 
node,
         NodeState newHealthState = 
nodeHealthSM.getNextState(status.getHealth(),
             lifeCycleEvent);
         NodeStatus newStatus =
-            nodeStateMap.updateNodeHealthState(node.getUuid(), newHealthState);
+            nodeStateMap.updateNodeHealthState(node.getID(), newHealthState);
         fireHealthStateEvent(newStatus.getHealth(), node);
       }
     } catch (InvalidStateTransitionException e) {
@@ -1086,7 +1075,7 @@ ScheduledFuture unpause() {
     return healthCheckFuture;
   }
 
-  protected void removeNode(DatanodeDetails datanodeDetails) {
-    nodeStateMap.removeNode(datanodeDetails);
+  protected void removeNode(DatanodeID datanodeID) {
+    nodeStateMap.removeNode(datanodeID);
   }
 }
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 c155c2513b..b3b02cb4c5 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
@@ -1587,14 +1587,14 @@ public void removePipeline(Pipeline pipeline) {
   public void addContainer(final DatanodeDetails datanodeDetails,
       final ContainerID containerId)
       throws NodeNotFoundException {
-    nodeStateManager.addContainer(datanodeDetails.getUuid(), containerId);
+    nodeStateManager.addContainer(datanodeDetails.getID(), containerId);
   }
 
   @Override
   public void removeContainer(final DatanodeDetails datanodeDetails,
                            final ContainerID containerId)
       throws NodeNotFoundException {
-    nodeStateManager.removeContainer(datanodeDetails.getUuid(), containerId);
+    nodeStateManager.removeContainer(datanodeDetails.getID(), containerId);
   }
 
   /**
@@ -1608,8 +1608,7 @@ public void removeContainer(final DatanodeDetails 
datanodeDetails,
   @Override
   public void setContainers(DatanodeDetails datanodeDetails,
       Set<ContainerID> containerIds) throws NodeNotFoundException {
-    nodeStateManager.setContainers(datanodeDetails.getUuid(),
-        containerIds);
+    nodeStateManager.setContainers(datanodeDetails.getID(), containerIds);
   }
 
   /**
@@ -1623,12 +1622,12 @@ public void setContainers(DatanodeDetails 
datanodeDetails,
   @Override
   public Set<ContainerID> getContainers(DatanodeDetails datanodeDetails)
       throws NodeNotFoundException {
-    return nodeStateManager.getContainers(datanodeDetails.getUuid());
+    return nodeStateManager.getContainers(datanodeDetails.getID());
   }
 
   public int getContainerCount(DatanodeDetails datanodeDetails)
       throws NodeNotFoundException {
-    return nodeStateManager.getContainerCount(datanodeDetails.getUuid());
+    return nodeStateManager.getContainerCount(datanodeDetails.getID());
   }
 
   public int getPipeLineCount(DatanodeDetails datanodeDetails)
@@ -1711,7 +1710,7 @@ public DatanodeDetails getNodeByUuid(UUID uuid) {
     }
 
     try {
-      return nodeStateManager.getNode(uuid);
+      return nodeStateManager.getNode(DatanodeID.of(uuid));
     } catch (NodeNotFoundException e) {
       LOG.warn("Cannot find node for uuid {}", uuid);
       return null;
@@ -1850,7 +1849,7 @@ public void removeNode(DatanodeDetails datanodeDetails) 
throws NodeNotFoundExcep
         if (clusterMap.contains(datanodeDetails)) {
           clusterMap.remove(datanodeDetails);
         }
-        nodeStateManager.removeNode(datanodeDetails);
+        nodeStateManager.removeNode(datanodeDetails.getID());
         removeFromDnsToDnIdMap(datanodeDetails.getID(), 
datanodeDetails.getIpAddress());
         final List<SCMCommand<?>> cmdList = 
getCommandQueue(datanodeDetails.getUuid());
         LOG.info("Clearing command queue of size {} for DN {}", 
cmdList.size(), datanodeDetails);
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/states/NodeNotFoundException.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/states/NodeNotFoundException.java
index 6de45b0ac3..b23d98e35d 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/states/NodeNotFoundException.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/states/NodeNotFoundException.java
@@ -17,6 +17,8 @@
 
 package org.apache.hadoop.hdds.scm.node.states;
 
+import org.apache.hadoop.hdds.protocol.DatanodeID;
+
 /**
  * This exception represents that the node that is being accessed does not
  * exist in NodeStateMap.
@@ -33,15 +35,10 @@ public NodeNotFoundException() {
   }
 
   /**
-   * Constructs an {@code NodeNotFoundException} with the specified
-   * detail message.
-   *
-   * @param message
-   *        The detail message (which is saved for later retrieval
-   *        by the {@link #getMessage()} method)
+   * Constructs an {@code NodeNotFoundException} with the given {@link 
DatanodeID}.
    */
-  public NodeNotFoundException(String message) {
-    super(message);
+  public NodeNotFoundException(DatanodeID datanodeID) {
+    super("Datanode " + datanodeID + " not found");
   }
 
 }
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 b2b9884ea1..40581592b2 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
@@ -25,11 +25,11 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.UUID;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 import java.util.function.Predicate;
 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.LayoutVersionProto;
@@ -50,11 +50,11 @@ public class NodeStateMap {
   /**
    * Node id to node info map.
    */
-  private final Map<UUID, DatanodeInfo> nodeMap = new HashMap<>();
+  private final Map<DatanodeID, DatanodeInfo> nodeMap = new HashMap<>();
   /**
    * Node to set of containers on the node.
    */
-  private final Map<UUID, Set<ContainerID>> nodeToContainer = new HashMap<>();
+  private final Map<DatanodeID, Set<ContainerID>> nodeToContainer = new 
HashMap<>();
 
   private final ReadWriteLock lock = new ReentrantReadWriteLock();
 
@@ -78,7 +78,7 @@ public void addNode(DatanodeDetails datanodeDetails, 
NodeStatus nodeStatus,
       throws NodeAlreadyExistsException {
     lock.writeLock().lock();
     try {
-      UUID id = datanodeDetails.getUuid();
+      final DatanodeID id = datanodeDetails.getID();
       if (nodeMap.containsKey(id)) {
         throw new NodeAlreadyExistsException("Node UUID: " + id);
       }
@@ -92,16 +92,12 @@ public void addNode(DatanodeDetails datanodeDetails, 
NodeStatus nodeStatus,
 
   /**
    * Removes a node from NodeStateMap.
-   *
-   * @param datanodeDetails DatanodeDetails
-   *
    */
-  public void removeNode(DatanodeDetails datanodeDetails) {
+  public void removeNode(DatanodeID datanodeID) {
     lock.writeLock().lock();
     try {
-      UUID uuid = datanodeDetails.getUuid();
-      nodeMap.remove(uuid);
-      nodeToContainer.remove(uuid);
+      nodeMap.remove(datanodeID);
+      nodeToContainer.remove(datanodeID);
     } finally {
       lock.writeLock().unlock();
     }
@@ -121,9 +117,9 @@ public void updateNode(DatanodeDetails datanodeDetails, 
NodeStatus nodeStatus,
           throws NodeNotFoundException {
     lock.writeLock().lock();
     try {
-      UUID id = datanodeDetails.getUuid();
+      final DatanodeID id = datanodeDetails.getID();
       if (!nodeMap.containsKey(id)) {
-        throw new NodeNotFoundException("Node UUID: " + id);
+        throw new NodeNotFoundException(id);
       }
       nodeMap.put(id, new DatanodeInfo(datanodeDetails, nodeStatus,
               layoutInfo));
@@ -140,10 +136,10 @@ public void updateNode(DatanodeDetails datanodeDetails, 
NodeStatus nodeStatus,
    *
    * @throws NodeNotFoundException if the node is not present
    */
-  public NodeStatus updateNodeHealthState(UUID nodeId, NodeState newHealth)
+  public NodeStatus updateNodeHealthState(DatanodeID nodeId, NodeState 
newHealth)
       throws NodeNotFoundException {
+    lock.writeLock().lock();
     try {
-      lock.writeLock().lock();
       DatanodeInfo dn = getNodeInfoUnsafe(nodeId);
       NodeStatus oldStatus = dn.getNodeStatus();
       NodeStatus newStatus = new NodeStatus(
@@ -163,11 +159,11 @@ public NodeStatus updateNodeHealthState(UUID nodeId, 
NodeState newHealth)
    *
    * @throws NodeNotFoundException if the node is not present
    */
-  public NodeStatus updateNodeOperationalState(UUID nodeId,
+  public NodeStatus updateNodeOperationalState(DatanodeID nodeId,
       NodeOperationalState newOpState, long opStateExpiryEpochSeconds)
       throws NodeNotFoundException {
+    lock.writeLock().lock();
     try {
-      lock.writeLock().lock();
       DatanodeInfo dn = getNodeInfoUnsafe(nodeId);
       NodeStatus oldStatus = dn.getNodeStatus();
       NodeStatus newStatus = new NodeStatus(
@@ -180,51 +176,22 @@ public NodeStatus updateNodeOperationalState(UUID nodeId,
   }
 
   /**
-   * Returns DatanodeInfo for the given node id.
-   *
-   * @param uuid Node Id
-   *
-   * @return DatanodeInfo of the node
-   *
+   * @return the info for the given node id.
    * @throws NodeNotFoundException if the node is not present
    */
-  public DatanodeInfo getNodeInfo(UUID uuid) throws NodeNotFoundException {
+  public DatanodeInfo getNodeInfo(DatanodeID datanodeID) throws 
NodeNotFoundException {
     lock.readLock().lock();
     try {
-      return getNodeInfoUnsafe(uuid);
+      return getNodeInfoUnsafe(datanodeID);
     } finally {
       lock.readLock().unlock();
     }
   }
 
-  /**
-   * Returns the list of node ids which match the desired operational state
-   * and health. Passing a null for either value is equivalent to a wild card.
-   *
-   * Therefore, passing opState = null, health=stale will return all stale 
nodes
-   * regardless of their operational state.
-   *
-   * @param opState
-   * @param health
-   * @return The list of nodes matching the given states
-   */
-  public List<UUID> getNodes(NodeOperationalState opState, NodeState health) {
-    ArrayList<UUID> nodes = new ArrayList<>();
-    for (DatanodeInfo dn : filterNodes(opState, health)) {
-      nodes.add(dn.getUuid());
-    }
-    return nodes;
-  }
-
-  /**
-   * Returns the list of all the node ids.
-   *
-   * @return list of all the node ids
-   */
-  public List<UUID> getAllNodes() {
+  public int getNodeCount() {
+    lock.readLock().lock();
     try {
-      lock.readLock().lock();
-      return new ArrayList<>(nodeMap.keySet());
+      return nodeMap.size();
     } finally {
       lock.readLock().unlock();
     }
@@ -287,13 +254,10 @@ public int getNodeCount(NodeStatus state) {
    * Therefore, passing opState=null, health=stale will count all stale nodes
    * regardless of their operational state.
    *
-   * @param opState
-   * @param health
-   *
    * @return Number of nodes in the specified state
    */
   public int getNodeCount(NodeOperationalState opState, NodeState health) {
-    return getNodes(opState, health).size();
+    return filterNodes(opState, health).size();
   }
 
   /**
@@ -313,21 +277,16 @@ public int getTotalNodeCount() {
   /**
    * Returns the current state of the node.
    *
-   * @param uuid node id
+   * @param datanodeID node id
    *
    * @return NodeState
    *
    * @throws NodeNotFoundException if the node is not found
    */
-  public NodeStatus getNodeStatus(UUID uuid) throws NodeNotFoundException {
+  public NodeStatus getNodeStatus(DatanodeID datanodeID) throws 
NodeNotFoundException {
     lock.readLock().lock();
     try {
-      DatanodeInfo dn = nodeMap.get(uuid);
-      if (dn == null) {
-        throw new NodeNotFoundException("Node not found in node map." +
-            " UUID: " + uuid);
-      }
-      return dn.getNodeStatus();
+      return getNodeInfoUnsafe(datanodeID).getNodeStatus();
     } finally {
       lock.readLock().unlock();
     }
@@ -335,62 +294,54 @@ public NodeStatus getNodeStatus(UUID uuid) throws 
NodeNotFoundException {
 
   /**
    * Adds the given container to the specified datanode.
-   *
-   * @param uuid - datanode uuid
-   * @param containerId - containerID
    * @throws NodeNotFoundException - if datanode is not known. For new datanode
    *                        use addDatanodeInContainerMap call.
    */
-  public void addContainer(final UUID uuid,
+  public void addContainer(final DatanodeID datanodeID,
                            final ContainerID containerId)
       throws NodeNotFoundException {
     lock.writeLock().lock();
     try {
-      checkIfNodeExist(uuid);
-      nodeToContainer.get(uuid).add(containerId);
+      getExisting(datanodeID).add(containerId);
     } finally {
       lock.writeLock().unlock();
     }
   }
 
-  public void setContainers(UUID uuid, Set<ContainerID> containers)
+  public void setContainers(DatanodeID id, Set<ContainerID> containers)
       throws NodeNotFoundException {
     lock.writeLock().lock();
     try {
-      checkIfNodeExist(uuid);
-      nodeToContainer.put(uuid, containers);
+      getExisting(id);
+      nodeToContainer.put(id, containers);
     } finally {
       lock.writeLock().unlock();
     }
   }
 
-  public Set<ContainerID> getContainers(UUID uuid)
+  public Set<ContainerID> getContainers(DatanodeID id)
       throws NodeNotFoundException {
     lock.readLock().lock();
     try {
-      checkIfNodeExist(uuid);
-      return new HashSet<>(nodeToContainer.get(uuid));
+      return new HashSet<>(getExisting(id));
     } finally {
       lock.readLock().unlock();
     }
   }
 
-  public int getContainerCount(UUID uuid) throws NodeNotFoundException {
+  public int getContainerCount(DatanodeID datanodeID) throws 
NodeNotFoundException {
     lock.readLock().lock();
     try {
-      checkIfNodeExist(uuid);
-      return nodeToContainer.get(uuid).size();
+      return getExisting(datanodeID).size();
     } finally {
       lock.readLock().unlock();
     }
   }
 
-  public void removeContainer(UUID uuid, ContainerID containerID) throws
-      NodeNotFoundException {
+  public void removeContainer(DatanodeID datanodeID, ContainerID containerID) 
throws NodeNotFoundException {
     lock.writeLock().lock();
     try {
-      checkIfNodeExist(uuid);
-      nodeToContainer.get(uuid).remove(containerID);
+      getExisting(datanodeID).remove(containerID);
     } finally {
       lock.writeLock().unlock();
     }
@@ -418,15 +369,15 @@ public String toString() {
   }
 
   /**
-   * Throws NodeNotFoundException if the Node for given id doesn't exist.
-   *
-   * @param uuid Node UUID
+   * @return the container set mapping to the given id.
    * @throws NodeNotFoundException If the node is missing.
    */
-  private void checkIfNodeExist(UUID uuid) throws NodeNotFoundException {
-    if (!nodeToContainer.containsKey(uuid)) {
-      throw new NodeNotFoundException("Node UUID: " + uuid);
+  private Set<ContainerID> getExisting(DatanodeID id) throws 
NodeNotFoundException {
+    final Set<ContainerID> containers = nodeToContainer.get(id);
+    if (containers == null) {
+      throw new NodeNotFoundException(id);
     }
+    return containers;
   }
 
   /**
@@ -469,9 +420,12 @@ private List<DatanodeInfo> 
filterNodes(Predicate<DatanodeInfo> filter) {
     return result;
   }
 
-  private @Nonnull DatanodeInfo getNodeInfoUnsafe(@Nonnull UUID uuid) throws 
NodeNotFoundException {
-    checkIfNodeExist(uuid);
-    return nodeMap.get(uuid);
+  private @Nonnull DatanodeInfo getNodeInfoUnsafe(@Nonnull DatanodeID id) 
throws NodeNotFoundException {
+    final DatanodeInfo info = nodeMap.get(id);
+    if (info == null) {
+      throw new NodeNotFoundException(id);
+    }
+    return info;
   }
 
   private static Predicate<DatanodeInfo> matching(NodeStatus status) {
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/MockNodeManager.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/MockNodeManager.java
index a0d39b0f01..73186cad06 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/MockNodeManager.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/MockNodeManager.java
@@ -428,7 +428,7 @@ public NodeStatus getNodeStatus(DatanodeDetails dd)
     } else if (deadNodes.contains(dd)) {
       return NodeStatus.inServiceDead();
     } else {
-      throw new NodeNotFoundException();
+      throw new NodeNotFoundException(dd.getID());
     }
   }
 
@@ -640,7 +640,7 @@ public void setContainers(DatanodeDetails uuid, 
Set<ContainerID> containerIds)
     try {
       node2ContainerMap.setContainersForDatanode(uuid.getUuid(), containerIds);
     } catch (SCMException e) {
-      throw new NodeNotFoundException(e.getMessage());
+      throw new NodeNotFoundException(uuid.getID());
     }
   }
 
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/SimpleMockNodeManager.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/SimpleMockNodeManager.java
index 085a282444..44469c6e41 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/SimpleMockNodeManager.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/SimpleMockNodeManager.java
@@ -127,7 +127,7 @@ public void setNodeOperationalState(DatanodeDetails dn,
       throws NodeNotFoundException {
     DatanodeInfo dni = nodeMap.get(dn.getUuid());
     if (dni == null) {
-      throw new NodeNotFoundException();
+      throw new NodeNotFoundException(dn.getID());
     }
     dni.setNodeStatus(
         new NodeStatus(
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestReplicationManagerUtil.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestReplicationManagerUtil.java
index 24ba6f2684..1d771327ca 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestReplicationManagerUtil.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestReplicationManagerUtil.java
@@ -110,7 +110,7 @@ public void testGetExcludedAndUsedNodes() throws 
NodeNotFoundException {
                   HddsProtos.NodeState.HEALTHY);
             }
           }
-          throw new NodeNotFoundException(dn.getUuidString());
+          throw new NodeNotFoundException(dn.getID());
         });
 
     ReplicationManagerUtil.ExcludedAndUsedNodes excludedAndUsedNodes =
@@ -194,7 +194,7 @@ public void 
testGetUsedAndExcludedNodesForQuasiClosedContainer() throws NodeNotF
                   HddsProtos.NodeState.HEALTHY);
             }
           }
-          throw new NodeNotFoundException(dn.getUuidString());
+          throw new NodeNotFoundException(dn.getID());
         });
 
     ReplicationManagerUtil.ExcludedAndUsedNodes excludedAndUsedNodes =
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java
index ef40c6b814..add8f62526 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java
@@ -193,7 +193,7 @@ public void testContainerPlacementCapacity() throws 
IOException,
       for (DatanodeDetails datanodeDetails : datanodes) {
         UUID dnId = datanodeDetails.getUuid();
         DatanodeInfo datanodeInfo = scmNodeManager.getNodeStateManager()
-            .getNode(dnId);
+            .getNode(datanodeDetails.getID());
         StorageContainerDatanodeProtocolProtos.StorageReportProto report =
             HddsTestUtils
                 .createStorageReport(dnId,
@@ -231,9 +231,8 @@ public void testContainerPlacementCapacity() throws 
IOException,
             SCMTestUtils.getReplicationFactor(conf).getNumber()) {
           break;
         }
-        UUID dnId = datanodeDetails.getUuid();
         DatanodeInfo datanodeInfo = scmNodeManager.getNodeStateManager()
-            .getNode(dnId);
+            .getNode(datanodeDetails.getID());
         addReplica(container, datanodeInfo);
         replicaCount++;
       }
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestNodeDecommissionManager.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestNodeDecommissionManager.java
index 3c71ee4e04..2f7453c0fb 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestNodeDecommissionManager.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestNodeDecommissionManager.java
@@ -1040,7 +1040,7 @@ private void setNodeOpState(DatanodeDetails dn, 
HddsProtos.NodeOperationalState
 
   private NodeStatus getNodeOpState(DatanodeDetails dn, List<DatanodeDetails> 
dns) throws NodeNotFoundException {
     if (dn.equals(dns.get(0))) {
-      throw new NodeNotFoundException();
+      throw new NodeNotFoundException(dn.getID());
     }
     for (DatanodeDetails datanode : dns) {
       if (datanode.equals(dn)) {
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestNodeStateManager.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestNodeStateManager.java
index 39d2f85307..bca1314c07 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestNodeStateManager.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestNodeStateManager.java
@@ -274,16 +274,16 @@ public void testContainerCanBeAddedAndRemovedFromDN()
     DatanodeDetails dn = generateDatanode();
     nsm.addNode(dn, UpgradeUtils.defaultLayoutVersionProto());
 
-    nsm.addContainer(dn.getUuid(), ContainerID.valueOf(1));
-    nsm.addContainer(dn.getUuid(), ContainerID.valueOf(2));
+    nsm.addContainer(dn.getID(), ContainerID.valueOf(1));
+    nsm.addContainer(dn.getID(), ContainerID.valueOf(2));
 
-    Set<ContainerID> containerSet = nsm.getContainers(dn.getUuid());
+    Set<ContainerID> containerSet = nsm.getContainers(dn.getID());
     assertEquals(2, containerSet.size());
     assertThat(containerSet).contains(ContainerID.valueOf(1));
     assertThat(containerSet).contains(ContainerID.valueOf(2));
 
-    nsm.removeContainer(dn.getUuid(), ContainerID.valueOf(2));
-    containerSet = nsm.getContainers(dn.getUuid());
+    nsm.removeContainer(dn.getID(), ContainerID.valueOf(2));
+    containerSet = nsm.getContainers(dn.getID());
     assertEquals(1, containerSet.size());
     assertThat(containerSet).contains(ContainerID.valueOf(1));
     assertThat(containerSet).doesNotContain(ContainerID.valueOf(2));
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/states/TestNodeStateMap.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/states/TestNodeStateMap.java
index 82775e4962..c0d0932bb9 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/states/TestNodeStateMap.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/states/TestNodeStateMap.java
@@ -23,6 +23,7 @@
 import java.util.UUID;
 import java.util.concurrent.CountDownLatch;
 import org.apache.hadoop.hdds.protocol.DatanodeDetails;
+import org.apache.hadoop.hdds.protocol.DatanodeID;
 import org.apache.hadoop.hdds.protocol.MockDatanodeDetails;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeOperationalState;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeState;
@@ -56,8 +57,8 @@ public void testNodeCanBeAddedAndRetrieved()
     DatanodeDetails dn = generateDatanode();
     NodeStatus status = NodeStatus.inServiceHealthy();
     map.addNode(dn, status, null);
-    assertEquals(dn, map.getNodeInfo(dn.getUuid()));
-    assertEquals(status, map.getNodeStatus(dn.getUuid()));
+    assertEquals(dn, map.getNodeInfo(dn.getID()));
+    assertEquals(status, map.getNodeStatus(dn.getID()));
   }
 
   @Test
@@ -69,9 +70,9 @@ public void testNodeHealthStateCanBeUpdated()
 
     NodeStatus expectedStatus = NodeStatus.inServiceStale();
     NodeStatus returnedStatus =
-        map.updateNodeHealthState(dn.getUuid(), expectedStatus.getHealth());
+        map.updateNodeHealthState(dn.getID(), expectedStatus.getHealth());
     assertEquals(expectedStatus, returnedStatus);
-    assertEquals(returnedStatus, map.getNodeStatus(dn.getUuid()));
+    assertEquals(returnedStatus, map.getNodeStatus(dn.getID()));
   }
 
   @Test
@@ -85,9 +86,9 @@ public void testNodeOperationalStateCanBeUpdated()
         NodeOperationalState.DECOMMISSIONING,
         NodeState.HEALTHY, 999);
     NodeStatus returnedStatus = map.updateNodeOperationalState(
-        dn.getUuid(), expectedStatus.getOperationalState(), 999);
+        dn.getID(), expectedStatus.getOperationalState(), 999);
     assertEquals(expectedStatus, returnedStatus);
-    assertEquals(returnedStatus, map.getNodeStatus(dn.getUuid()));
+    assertEquals(returnedStatus, map.getNodeStatus(dn.getID()));
     assertEquals(999, returnedStatus.getOpStateExpiryEpochSeconds());
   }
 
@@ -107,7 +108,7 @@ public void testGetNodeMethodsReturnCorrectCountsAndStates()
     assertEquals(1, nodes.size());
     assertEquals(1, map.getNodeCount(requestedState));
     assertEquals(nodeCount, map.getTotalNodeCount());
-    assertEquals(nodeCount, map.getAllNodes().size());
+    assertEquals(nodeCount, map.getNodeCount());
     assertEquals(nodeCount, map.getAllDatanodeInfos().size());
 
     // Checks for the getNodeCount(opstate, health) method
@@ -130,11 +131,11 @@ public void testConcurrency() throws Exception {
 
     map.addNode(datanodeDetails, NodeStatus.inServiceHealthy(), null);
 
-    UUID dnUuid = datanodeDetails.getUuid();
+    DatanodeID id = datanodeDetails.getID();
 
-    map.addContainer(dnUuid, ContainerID.valueOf(1L));
-    map.addContainer(dnUuid, ContainerID.valueOf(2L));
-    map.addContainer(dnUuid, ContainerID.valueOf(3L));
+    map.addContainer(id, ContainerID.valueOf(1L));
+    map.addContainer(id, ContainerID.valueOf(2L));
+    map.addContainer(id, ContainerID.valueOf(3L));
 
     CountDownLatch elementRemoved = new CountDownLatch(1);
     CountDownLatch loopStarted = new CountDownLatch(1);
@@ -142,7 +143,7 @@ public void testConcurrency() throws Exception {
     new Thread(() -> {
       try {
         loopStarted.await();
-        map.removeContainer(dnUuid, ContainerID.valueOf(1L));
+        map.removeContainer(id, ContainerID.valueOf(1L));
         elementRemoved.countDown();
       } catch (Exception e) {
         e.printStackTrace();
@@ -151,7 +152,7 @@ public void testConcurrency() throws Exception {
     }).start();
 
     boolean first = true;
-    for (ContainerID key : map.getContainers(dnUuid)) {
+    for (ContainerID key : map.getContainers(id)) {
       if (first) {
         loopStarted.countDown();
         elementRemoved.await();
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/ozone/container/testutils/ReplicationNodeManagerMock.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/ozone/container/testutils/ReplicationNodeManagerMock.java
index 48508891f6..e87760171a 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/ozone/container/testutils/ReplicationNodeManagerMock.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/ozone/container/testutils/ReplicationNodeManagerMock.java
@@ -241,7 +241,7 @@ public void setNodeOperationalState(DatanodeDetails dd,
       nodeStateMap.put(dd, new NodeStatus(newState, currentStatus.getHealth(),
           opStateExpiryEpocSec));
     } else {
-      throw new NodeNotFoundException();
+      throw new NodeNotFoundException(dd.getID());
     }
   }
 
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 2db57176cb..44c9d87695 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
@@ -270,7 +270,7 @@ public Response removeDatanodes(List<String> uuids) {
   private boolean preChecksSuccess(DatanodeDetails nodeByUuid, Map<String, 
String> failedNodeErrorResponseMap)
       throws NodeNotFoundException {
     if (null == nodeByUuid) {
-      throw new NodeNotFoundException("Node  not found !!!");
+      throw new NodeNotFoundException();
     }
     NodeStatus nodeStatus = null;
     AtomicBoolean isContainerOrPipeLineOpen = new AtomicBoolean(false);


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


Reply via email to