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 b8a83e20b959..3366c3e5f163 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 int getPipelinesCount(DatanodeDetails datanodeDetails) { */ 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 21b639ca8a64..3466fa423426 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> dnsToUuidMap = - new ConcurrentHashMap<>(); + private final Map> dnsToUuidMap = new ConcurrentHashMap<>(); private final int numPipelinesPerMetadataVolume; private final int heavyNodeCriteria; private final HDDSLayoutVersionManager scmLayoutVersionManager; @@ -400,7 +399,7 @@ public RegisteredCommand register( // 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 RegisteredCommand register( } 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 RegisteredCommand register( * @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 dnSet = dnsToUuidMap.get(addr); + private synchronized void removeFromDnsToUuidMap(String addr, UUID uuid) { + Set 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 @@ private SCMNodeStat getNodeStatInternal(DatanodeDetails datanodeDetails) { 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 DatanodeDetails getNodeByUuid(UUID uuid) { } 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 List getNodesByAddress(String address) { LOG.warn("address is null"); return results; } - Set uuids = dnsToUuidMap.get(address); + Set 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); }