ashishkumar50 commented on code in PR #4614:
URL: https://github.com/apache/ozone/pull/4614#discussion_r1178911081
##########
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/SCMContainerPlacementRackAware.java:
##########
@@ -99,11 +104,181 @@ public SCMContainerPlacementRackAware(final NodeManager
nodeManager,
*/
@Override
protected List<DatanodeDetails> chooseDatanodesInternal(
- List<DatanodeDetails> usedNodes,
- List<DatanodeDetails> excludedNodes,
- List<DatanodeDetails> favoredNodes, int nodesRequired,
- long metadataSizeRequired, long dataSizeRequired)
- throws SCMException {
+ List<DatanodeDetails> usedNodes,
+ List<DatanodeDetails> excludedNodes,
+ List<DatanodeDetails> favoredNodes, int nodesRequired,
+ long metadataSizeRequired, long dataSizeRequired)
+ throws SCMException {
+ Map<String, Long> mapSizeRequired = new HashMap<>();
+ mapSizeRequired.put(META_DATA_SIZE_REQUIRED, metadataSizeRequired);
+ mapSizeRequired.put(DATA_SIZE_REQUIRED, metadataSizeRequired);
+
+ if (!usedNodesPassed(usedNodes)) {
+ // If interface is called without used nodes
+ // In this case consider only exclude nodes to determine racks
+ return chooseDatanodesInternalLegacy(excludedNodes,
+ favoredNodes, nodesRequired, mapSizeRequired);
+ }
+ Preconditions.checkArgument(nodesRequired > 0);
+ metrics.incrDatanodeRequestCount(nodesRequired);
+ int datanodeCount = networkTopology.getNumOfLeafNode(NetConstants.ROOT);
+ int excludedNodesCount = excludedNodes == null ? 0 : excludedNodes.size();
+ int usedNodesCount = usedNodes == null ? 0 : usedNodes.size();
+ if (datanodeCount < nodesRequired + excludedNodesCount + usedNodesCount) {
+ throw new SCMException("No enough datanodes to choose. " +
+ "TotalNode = " + datanodeCount + " RequiredNode = " + nodesRequired +
+ " ExcludedNode = " + excludedNodesCount +
+ " UsedNode = " + usedNodesCount, null);
+ }
+ List<DatanodeDetails> mutableFavoredNodes = favoredNodes;
+ // sanity check of favoredNodes
+ if (mutableFavoredNodes != null && excludedNodes != null) {
+ mutableFavoredNodes = new ArrayList<>();
+ mutableFavoredNodes.addAll(favoredNodes);
+ mutableFavoredNodes.removeAll(excludedNodes);
+ }
Review Comment:
usedNodes here means which are actually currently being used.
mutableFavoredNodes are the nodes which can be chosen for placement if
satisfying rack aware policy.
When we call policy it should not pass usedNodes in favoredNodes, because
those are already being used.
Before this change used nodes were passed in excluded nodes, so there was no
distinction between used nodes and which nodes to be really excluded.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]