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 1bcd2d2f3c2..46f13e66c6d 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 containerIds) + public void setContainers(DatanodeID datanodeID, Set 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 getContainers(UUID uuid) + public Set 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 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 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 c155c2513b3..b3b02cb4c54 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 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 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> 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 6de45b0ac37..b23d98e35d8 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 b2b9884ea16..40581592b28 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 nodeMap = new HashMap<>(); + private final Map nodeMap = new HashMap<>(); /** * Node to set of containers on the node. */ - private final Map> nodeToContainer = new HashMap<>(); + private final Map> 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 getNodes(NodeOperationalState opState, NodeState health) { - ArrayList 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 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 containers) + public void setContainers(DatanodeID id, Set 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 getContainers(UUID uuid) + public Set 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 getExisting(DatanodeID id) throws NodeNotFoundException { + final Set containers = nodeToContainer.get(id); + if (containers == null) { + throw new NodeNotFoundException(id); } + return containers; } /** @@ -469,9 +420,12 @@ private List filterNodes(Predicate 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 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 a0d39b0f01c..73186cad06a 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 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 085a2824440..44469c6e41e 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 24ba6f26849..1d771327ca6 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 ef40c6b814b..add8f625266 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 3c71ee4e04e..2f7453c0fb7 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 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 39d2f85307e..bca1314c076 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 containerSet = nsm.getContainers(dn.getUuid()); + Set 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 82775e4962e..c0d0932bb9f 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 48508891f6d..e87760171a0 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 2db57176cb8..44c9d876956 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 uuids) { private boolean preChecksSuccess(DatanodeDetails nodeByUuid, Map failedNodeErrorResponseMap) throws NodeNotFoundException { if (null == nodeByUuid) { - throw new NodeNotFoundException("Node not found !!!"); + throw new NodeNotFoundException(); } NodeStatus nodeStatus = null; AtomicBoolean isContainerOrPipeLineOpen = new AtomicBoolean(false);