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]