This is an automated email from the ASF dual-hosted git repository. yiyang0203 pushed a commit to branch HDDS-10160 in repository https://gitbox.apache.org/repos/asf/ozone.git
commit 39f3f032ea44fac99ed5c17df186ee2ab5a8725d Author: Symious <[email protected]> AuthorDate: Fri Jan 19 16:08:59 2024 +0800 HDDS-10160. Cache sort results in ContainerBalancerSelectionCriteria --- .../ContainerBalancerSelectionCriteria.java | 28 ++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerSelectionCriteria.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerSelectionCriteria.java index 8171320a54..b44fa426e8 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerSelectionCriteria.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerSelectionCriteria.java @@ -32,7 +32,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Comparator; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.NavigableSet; import java.util.Set; import java.util.TreeSet; @@ -52,6 +54,7 @@ public class ContainerBalancerSelectionCriteria { private Set<ContainerID> selectedContainers; private Set<ContainerID> excludeContainers; private FindSourceStrategy findSourceStrategy; + private Map<DatanodeDetails, NavigableSet<ContainerID>> setMap; public ContainerBalancerSelectionCriteria( ContainerBalancerConfiguration balancerConfiguration, @@ -66,6 +69,7 @@ public class ContainerBalancerSelectionCriteria { selectedContainers = new HashSet<>(); excludeContainers = balancerConfiguration.getExcludeContainers(); this.findSourceStrategy = findSourceStrategy; + this.setMap = new HashMap<>(); } /** @@ -92,15 +96,31 @@ public class ContainerBalancerSelectionCriteria { */ public NavigableSet<ContainerID> getCandidateContainers( DatanodeDetails node, long sizeMovedAlready) { - NavigableSet<ContainerID> containerIDSet = - new TreeSet<>(orderContainersByUsedBytes().reversed()); + // Initialize containerSet for node + if (!setMap.containsKey(node)) { + NavigableSet<ContainerID> newSet = + new TreeSet<>(orderContainersByUsedBytes().reversed()); + try { + newSet.addAll(nodeManager.getContainers(node)); + } catch (NodeNotFoundException e) { + LOG.warn("Could not find Datanode {} while selecting candidate " + + "containers for Container Balancer.", node.toString(), e); + return newSet; + } + setMap.put(node, newSet); + } + + // In case the node is removed try { - containerIDSet.addAll(nodeManager.getContainers(node)); + nodeManager.getContainers(node); } catch (NodeNotFoundException e) { LOG.warn("Could not find Datanode {} while selecting candidate " + "containers for Container Balancer.", node.toString(), e); - return containerIDSet; + setMap.remove(node); + return new TreeSet<>(); } + + NavigableSet<ContainerID> containerIDSet = setMap.get(node); if (excludeContainers != null) { containerIDSet.removeAll(excludeContainers); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
