This is an automated email from the ASF dual-hosted git repository.

xyuanlu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/helix.git


The following commit(s) were added to refs/heads/master by this push:
     new 30986a556 Make virtual group assignment for 
FaultZoneBasedVirtualGroupAssignmentAlgorithm deterministic (#3056)
30986a556 is described below

commit 30986a556342199db79d7865c3a885cc30e235b3
Author: Nisarg Thakkar <[email protected]>
AuthorDate: Mon Aug 11 13:40:54 2025 -0700

    Make virtual group assignment for 
FaultZoneBasedVirtualGroupAssignmentAlgorithm deterministic (#3056)
    
    Make virtual group assignment for 
FaultZoneBasedVirtualGroupAssignmentAlgorithm deterministic
---
 ...ltZoneBasedVirtualGroupAssignmentAlgorithm.java |  17 ++-
 .../TestFaultZoneBasedVirtualGroupAssignment.java  | 132 +++++++++++++--------
 .../helix/rest/server/TestClusterAccessor.java     |  10 +-
 3 files changed, 93 insertions(+), 66 deletions(-)

diff --git 
a/helix-core/src/main/java/org/apache/helix/cloud/topology/FaultZoneBasedVirtualGroupAssignmentAlgorithm.java
 
b/helix-core/src/main/java/org/apache/helix/cloud/topology/FaultZoneBasedVirtualGroupAssignmentAlgorithm.java
index 4b22fc99b..5530a9169 100644
--- 
a/helix-core/src/main/java/org/apache/helix/cloud/topology/FaultZoneBasedVirtualGroupAssignmentAlgorithm.java
+++ 
b/helix-core/src/main/java/org/apache/helix/cloud/topology/FaultZoneBasedVirtualGroupAssignmentAlgorithm.java
@@ -20,20 +20,14 @@ package org.apache.helix.cloud.topology;
  */
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.PriorityQueue;
 import java.util.Queue;
 import java.util.Set;
-import java.util.TreeSet;
-import java.util.stream.Collectors;
-
-import org.apache.commons.math3.util.Pair;
 
 import static org.apache.helix.util.VirtualTopologyUtil.computeVirtualGroupId;
 
@@ -128,20 +122,23 @@ public class 
FaultZoneBasedVirtualGroupAssignmentAlgorithm implements VirtualGro
 
     // Priority queue sorted by current load of the virtual group
     // We always assign new zones to the group with the smallest load to keep 
them balanced.
+    // If loads are equal, sort by zone name to ensure consistent ordering
     Queue<String> minHeap = new PriorityQueue<>(
-        Comparator.comparingInt(vg ->
+        Comparator.<String>comparingInt(vg ->
             virtualGroupToZoneMapping.get(vg).stream()
                 .map(zoneMapping::get)
                 .mapToInt(Set::size)
                 .sum()
-        )
+        ).thenComparing(String::compareTo)
     );
     // Seed the min-heap with existing groups
     minHeap.addAll(virtualGroupToZoneMapping.keySet());
 
     // Sort unassigned zones by descending number of unassigned instances, 
assigning "heavier" zones first.
-    unassignedZones.sort(Comparator.comparingInt(zone -> 
zoneMapping.get(zone).size())
-        .reversed());
+    // If sizes are equal, sort by zone name to ensure consistent ordering
+    unassignedZones.sort(Comparator.<String>comparingInt(zone -> 
zoneMapping.get(zone).size())
+        .reversed()
+        .thenComparing(String::compareTo));
 
     // Assign each zone to the least-loaded group
     for (String zone : unassignedZones) {
diff --git 
a/helix-core/src/test/java/org/apache/helix/cloud/virtualTopologyGroup/TestFaultZoneBasedVirtualGroupAssignment.java
 
b/helix-core/src/test/java/org/apache/helix/cloud/virtualTopologyGroup/TestFaultZoneBasedVirtualGroupAssignment.java
index 85463fe52..58959916e 100644
--- 
a/helix-core/src/test/java/org/apache/helix/cloud/virtualTopologyGroup/TestFaultZoneBasedVirtualGroupAssignment.java
+++ 
b/helix-core/src/test/java/org/apache/helix/cloud/virtualTopologyGroup/TestFaultZoneBasedVirtualGroupAssignment.java
@@ -1,7 +1,12 @@
 package org.apache.helix.cloud.virtualTopologyGroup;
 
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -53,6 +58,31 @@ public class TestFaultZoneBasedVirtualGroupAssignment {
         algorithm.computeAssignment(numGroups, GROUP_NAME, zoneMapping, 
virtualMapping), expected);
   }
 
+  @Test
+  public void testDeterministicVirtualZoneAssignment() {
+    VirtualGroupAssignmentAlgorithm algorithm = 
FaultZoneBasedVirtualGroupAssignmentAlgorithm.getInstance();
+    int numGroups = 4;
+
+    Map<String, Set<String>> virtualMapping1 = 
algorithm.computeAssignment(numGroups, GROUP_NAME, _zoneMapping);
+    Map<String, Set<String>> virtualMapping2 = 
algorithm.computeAssignment(numGroups, GROUP_NAME, 
shuffleZoneMapping(_zoneMapping));
+    Map<String, Set<String>> virtualMapping3 = 
algorithm.computeAssignment(numGroups, GROUP_NAME, 
shuffleZoneMapping(_zoneMapping));
+
+    Assert.assertEquals(virtualMapping1, virtualMapping2);
+    Assert.assertEquals(virtualMapping1, virtualMapping3);
+  }
+
+  private Map<String, Set<String>> shuffleZoneMapping(Map<String, Set<String>> 
virtualMapping) {
+    LinkedHashMap<String, Set<String>> shuffledMapping = new LinkedHashMap<>();
+    List<String> keys = new ArrayList<>(virtualMapping.keySet());
+    Collections.shuffle(keys);
+    for (String key : keys) {
+      ArrayList<String> instances = new ArrayList<>(virtualMapping.get(key));
+      Collections.shuffle(instances);
+      shuffledMapping.put(key, new LinkedHashSet<>(instances));
+    }
+    return shuffledMapping;
+  }
+
   @DataProvider
   public Object[][] getMappingTests() {
     VirtualGroupAssignmentAlgorithm algorithm = 
FaultZoneBasedVirtualGroupAssignmentAlgorithm.getInstance();
@@ -61,105 +91,105 @@ public class TestFaultZoneBasedVirtualGroupAssignment {
     Map<String, Set<String>> virtualMapping = new HashMap<>();
 
     virtualMapping.put(computeVirtualGroupId(0, GROUP_NAME), new HashSet<>());
-    virtualMapping.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_5"));
-    virtualMapping.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_1"));
+    virtualMapping.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_0"));
+    virtualMapping.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_12"));
     virtualMapping.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_16"));
-    virtualMapping.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_7"));
-    virtualMapping.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_14"));
+    virtualMapping.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_2"));
+    virtualMapping.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_6"));
 
     virtualMapping.put(computeVirtualGroupId(1, GROUP_NAME), new HashSet<>());
-    virtualMapping.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_0"));
-    virtualMapping.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_12"));
+    virtualMapping.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_1"));
+    virtualMapping.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_13"));
+    virtualMapping.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_17"));
     virtualMapping.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_3"));
-    virtualMapping.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_18"));
-    virtualMapping.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_10"));
+    virtualMapping.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_7"));
 
     virtualMapping.put(computeVirtualGroupId(2, GROUP_NAME), new HashSet<>());
-    virtualMapping.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_17"));
-    virtualMapping.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_9"));
-    virtualMapping.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_11"));
-    virtualMapping.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_19"));
+    virtualMapping.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_10"));
+    virtualMapping.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_14"));
+    virtualMapping.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_18"));
     virtualMapping.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_4"));
+    virtualMapping.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_8"));
 
     virtualMapping.put(computeVirtualGroupId(3, GROUP_NAME), new HashSet<>());
-    virtualMapping.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_13"));
-    virtualMapping.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_6"));
-    virtualMapping.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_2"));
+    virtualMapping.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_11"));
     virtualMapping.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_15"));
-    virtualMapping.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_8"));
+    virtualMapping.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_19"));
+    virtualMapping.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_5"));
+    virtualMapping.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_9"));
 
 
     Map<String, Set<String>> virtualMapping2 = new HashMap<>();
     virtualMapping2.put(computeVirtualGroupId(0, GROUP_NAME), new HashSet<>());
-    virtualMapping2.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_1"));
-    virtualMapping2.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_12"));
+    virtualMapping2.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_0"));
+    virtualMapping2.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_15"));
+    virtualMapping2.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_4"));
 
     virtualMapping2.put(computeVirtualGroupId(1, GROUP_NAME), new HashSet<>());
-    virtualMapping2.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_0"));
+    virtualMapping2.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_1"));
+    virtualMapping2.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_16"));
     virtualMapping2.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_5"));
-    virtualMapping2.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_13"));
 
     virtualMapping2.put(computeVirtualGroupId(2, GROUP_NAME), new HashSet<>());
+    virtualMapping2.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_10"));
     virtualMapping2.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_17"));
     virtualMapping2.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_6"));
-    virtualMapping2.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_15"));
 
     virtualMapping2.put(computeVirtualGroupId(3, GROUP_NAME), new HashSet<>());
-    virtualMapping2.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_19"));
-    virtualMapping2.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_8"));
-    virtualMapping2.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_9"));
+    virtualMapping2.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_11"));
+    virtualMapping2.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_18"));
+    virtualMapping2.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_7"));
 
     virtualMapping2.put(computeVirtualGroupId(4, GROUP_NAME), new HashSet<>());
-    virtualMapping2.get(computeVirtualGroupId(4, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_7"));
-    virtualMapping2.get(computeVirtualGroupId(4, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_10"));
-    virtualMapping2.get(computeVirtualGroupId(4, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_18"));
+    virtualMapping2.get(computeVirtualGroupId(4, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_12"));
+    virtualMapping2.get(computeVirtualGroupId(4, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_19"));
+    virtualMapping2.get(computeVirtualGroupId(4, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_8"));
 
     virtualMapping2.put(computeVirtualGroupId(5, GROUP_NAME), new HashSet<>());
-    virtualMapping2.get(computeVirtualGroupId(5, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_3"));
-    virtualMapping2.get(computeVirtualGroupId(5, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_16"));
-    virtualMapping2.get(computeVirtualGroupId(5, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_14"));
+    virtualMapping2.get(computeVirtualGroupId(5, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_13"));
+    virtualMapping2.get(computeVirtualGroupId(5, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_2"));
+    virtualMapping2.get(computeVirtualGroupId(5, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_9"));
 
     virtualMapping2.put(computeVirtualGroupId(6, GROUP_NAME), new HashSet<>());
-    virtualMapping2.get(computeVirtualGroupId(6, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_11"));
-    virtualMapping2.get(computeVirtualGroupId(6, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_2"));
-    virtualMapping2.get(computeVirtualGroupId(6, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_4"));
+    virtualMapping2.get(computeVirtualGroupId(6, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_14"));
+    virtualMapping2.get(computeVirtualGroupId(6, 
GROUP_NAME)).addAll(_zoneMapping.get("zone_3"));
 
 
     Map<String, Set<String>> virtualMapping3 = new HashMap<>();
     virtualMapping3.put(computeVirtualGroupId(0, GROUP_NAME), new HashSet<>());
-    virtualMapping3.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_1"));
-    virtualMapping3.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_12"));
-    virtualMapping3.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_20"));
+    virtualMapping3.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_0"));
+    virtualMapping3.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_15"));
+    virtualMapping3.get(computeVirtualGroupId(0, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_4"));
 
     virtualMapping3.put(computeVirtualGroupId(1, GROUP_NAME), new HashSet<>());
-    virtualMapping3.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_0"));
+    virtualMapping3.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_1"));
+    virtualMapping3.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_16"));
     virtualMapping3.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_5"));
-    virtualMapping3.get(computeVirtualGroupId(1, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_13"));
 
     virtualMapping3.put(computeVirtualGroupId(2, GROUP_NAME), new HashSet<>());
+    virtualMapping3.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_10"));
     virtualMapping3.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_17"));
     virtualMapping3.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_6"));
-    virtualMapping3.get(computeVirtualGroupId(2, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_15"));
 
     virtualMapping3.put(computeVirtualGroupId(3, GROUP_NAME), new HashSet<>());
-    virtualMapping3.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_19"));
-    virtualMapping3.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_8"));
-    virtualMapping3.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_9"));
+    virtualMapping3.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_11"));
+    virtualMapping3.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_18"));
+    virtualMapping3.get(computeVirtualGroupId(3, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_7"));
 
     virtualMapping3.put(computeVirtualGroupId(4, GROUP_NAME), new HashSet<>());
-    virtualMapping3.get(computeVirtualGroupId(4, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_7"));
-    virtualMapping3.get(computeVirtualGroupId(4, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_10"));
-    virtualMapping3.get(computeVirtualGroupId(4, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_18"));
+    virtualMapping3.get(computeVirtualGroupId(4, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_12"));
+    virtualMapping3.get(computeVirtualGroupId(4, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_19"));
+    virtualMapping3.get(computeVirtualGroupId(4, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_8"));
 
     virtualMapping3.put(computeVirtualGroupId(5, GROUP_NAME), new HashSet<>());
-    virtualMapping3.get(computeVirtualGroupId(5, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_3"));
-    virtualMapping3.get(computeVirtualGroupId(5, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_16"));
-    virtualMapping3.get(computeVirtualGroupId(5, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_14"));
+    virtualMapping3.get(computeVirtualGroupId(5, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_13"));
+    virtualMapping3.get(computeVirtualGroupId(5, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_2"));
+    virtualMapping3.get(computeVirtualGroupId(5, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_9"));
 
     virtualMapping3.put(computeVirtualGroupId(6, GROUP_NAME), new HashSet<>());
-    virtualMapping3.get(computeVirtualGroupId(6, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_11"));
-    virtualMapping3.get(computeVirtualGroupId(6, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_2"));
-    virtualMapping3.get(computeVirtualGroupId(6, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_4"));
+    virtualMapping3.get(computeVirtualGroupId(6, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_14"));
+    virtualMapping3.get(computeVirtualGroupId(6, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_3"));
+    virtualMapping3.get(computeVirtualGroupId(6, 
GROUP_NAME)).addAll(_zoneMapping2.get("zone_20"));
 
     return new Object[][]{{4, virtualMapping, algorithm, _zoneMapping, new 
HashMap<>()},
         {7, virtualMapping2, algorithm, _zoneMapping, new HashMap<>()},
diff --git 
a/helix-rest/src/test/java/org/apache/helix/rest/server/TestClusterAccessor.java
 
b/helix-rest/src/test/java/org/apache/helix/rest/server/TestClusterAccessor.java
index 619a78127..f9af0a9c2 100644
--- 
a/helix-rest/src/test/java/org/apache/helix/rest/server/TestClusterAccessor.java
+++ 
b/helix-rest/src/test/java/org/apache/helix/rest/server/TestClusterAccessor.java
@@ -353,7 +353,7 @@ public class TestClusterAccessor extends AbstractTestClass {
     setupClusterForVirtualTopology(VG_CLUSTER);
     String test1 = 
"{\"virtualTopologyGroupNumber\":\"7\",\"virtualTopologyGroupName\":\"vgTest\"}";
     String test2 = 
"{\"virtualTopologyGroupNumber\":\"9\",\"virtualTopologyGroupName\":\"vgTest\"}";
-    // Split 5 zones into 2 virtual groups, expect 0-1-2 in virtual group 0, 
3-4 in virtual group 1
+    // Split 5 zones into 2 virtual groups, expect 0-2-4 in virtual group 0, 
1-3 in virtual group 1
     String test3 = 
"{\"virtualTopologyGroupNumber\":\"2\",\"virtualTopologyGroupName\":\"vgTest\","
         + "\"assignmentAlgorithmType\":\"ZONE_BASED\"}";
     String test4 = 
"{\"virtualTopologyGroupNumber\":\"5\",\"virtualTopologyGroupName\":\"vgTest\","
@@ -384,10 +384,10 @@ public class TestClusterAccessor extends 
AbstractTestClass {
             "vgCluster_localhost_12925", "vgTest_1",
             "vgCluster_localhost_12927", "vgTest_0")},
         {test4, 5, ImmutableMap.of(
-            "vgCluster_localhost_12918", "vgTest_4",
-            "vgCluster_localhost_12919", "vgTest_4",
-            "vgCluster_localhost_12925", "vgTest_2",
-            "vgCluster_localhost_12927", "vgTest_1")},
+            "vgCluster_localhost_12918", "vgTest_0",
+            "vgCluster_localhost_12919", "vgTest_0",
+            "vgCluster_localhost_12925", "vgTest_3",
+            "vgCluster_localhost_12927", "vgTest_4")},
         // repeat test3 for deterministic and test for decreasing numGroups
         {test3, 2, ImmutableMap.of(
             "vgCluster_localhost_12918", "vgTest_0",

Reply via email to