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]

Reply via email to