This is an automated email from the ASF dual-hosted git repository.
peterxcli 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 77d582975a6 HDDS-16631. Fix chooseRandom for rack names with common
prefixes (#11401)
77d582975a6 is described below
commit 77d582975a6ce66a47f7649da086f8fd4ff1b2e9
Author: adwetojha <[email protected]>
AuthorDate: Sun Oct 4 19:06:30 2026 +0530
HDDS-16631. Fix chooseRandom for rack names with common prefixes (#11401)
---
.../org/apache/hadoop/hdds/scm/net/InnerNodeImpl.java | 2 +-
.../hadoop/hdds/scm/net/TestNetworkTopologyImpl.java | 19 +++++++++++++++++++
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/net/InnerNodeImpl.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/net/InnerNodeImpl.java
index 7b523a3115a..e4fccc5a0fb 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/net/InnerNodeImpl.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/net/InnerNodeImpl.java
@@ -439,7 +439,7 @@ public Node getLeaf(int leafIndex, List<String>
excludedScopes,
int leafCount = child.getNumOfLeaves();
// skip nodes covered by excluded scopes
for (Map.Entry<String, Integer> entry: excludedNodeCount.entrySet()) {
- if (entry.getKey().startsWith(child.getNetworkFullPath())) {
+ if (child.isAncestor(entry.getKey())) {
leafCount -= entry.getValue();
}
}
diff --git
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/scm/net/TestNetworkTopologyImpl.java
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/scm/net/TestNetworkTopologyImpl.java
index be85104aa4b..c71986cbb26 100644
---
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/scm/net/TestNetworkTopologyImpl.java
+++
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/scm/net/TestNetworkTopologyImpl.java
@@ -454,6 +454,25 @@ void testChooseRandomExcludedScope(NodeSchema[] schemas,
}
}
+ @Test
+ void testChooseRandomWithExcludedScopePrefix() {
+ NodeSchema[] schemas = {ROOT_SCHEMA, RACK_SCHEMA, LEAF_SCHEMA};
+ Node datanodeA = createDatanode("datanode-A", "/r1");
+ Node datanodeB = createDatanode("datanode-B", "/r10");
+
+ Node[] nodeArray = {datanodeA, datanodeB};
+ initNetworkTopology(schemas, nodeArray);
+
+ List<String> excludedScopes = new ArrayList<>();
+ excludedScopes.add(datanodeB.getNetworkFullPath());
+
+ Node chosenNode = cluster.chooseRandom(
+ ROOT, excludedScopes, null, null, 0);
+
+ assertEquals(datanodeA, chosenNode,
+ "datanode-A should be selected when datanode-B is excluded");
+ }
+
/**
* Following test checks that chooseRandom works for an excluded nodes.
*/
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]