diff --git a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/assignment/instance/InstanceReplicaGroupPartitionSelector.java b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/assignment/instance/InstanceReplicaGroupPartitionSelector.java index b794d4f132bc..b6c62ac12e63 100644 --- a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/assignment/instance/InstanceReplicaGroupPartitionSelector.java +++ b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/assignment/instance/InstanceReplicaGroupPartitionSelector.java @@ -230,7 +230,6 @@ public void selectInstances(Map> poolToInstanceCon instancesInPartition.add(replicaGroupIdToInstancesMap[replicaGroupId][instanceIdInReplicaGroup]); instanceIdInReplicaGroup = (instanceIdInReplicaGroup + 1) % numInstancesPerReplicaGroup; } - instancesInPartition.sort(null); LOGGER.info("Selecting instances: {} for replica-group: {}, partition: {} for table: {}", instancesInPartition, replicaGroupId, partitionId, _tableNameWithType); instancePartitions.setInstances(partitionId, replicaGroupId, instancesInPartition); @@ -271,7 +270,6 @@ public void selectInstances(Map> poolToInstanceCon instancesToSelect.add(instanceConfigs.get(i).getInstanceName()); } } - instancesToSelect.sort(null); LOGGER.info("Selecting instances: {} for table: {}", instancesToSelect, _tableNameWithType); // Set the instances as partition 0 replica 0 instancePartitions.setInstances(0, 0, instancesToSelect); diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/assignment/instance/InstanceAssignmentTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/assignment/instance/InstanceAssignmentTest.java index 654568cac0f0..4715271fc55c 100644 --- a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/assignment/instance/InstanceAssignmentTest.java +++ b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/assignment/instance/InstanceAssignmentTest.java @@ -84,9 +84,9 @@ public void testDefaultOfflineReplicaGroup() { // [i8, i9, i0, i1, i2, i3, i4, i5, i6, i7] // r0 r1 r2 r0 r1 r2 assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 8)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 1)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 2, SERVER_INSTANCE_ID_PREFIX + 9)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 2)); assertEquals(instancePartitions.getInstances(0, 2), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 3)); @@ -117,17 +117,17 @@ public void testDefaultOfflineReplicaGroup() { // p0, p0, p1 // p1 assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 8)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 1)); assertEquals(instancePartitions.getInstances(1, 0), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 8)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 2, SERVER_INSTANCE_ID_PREFIX + 9)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 2)); assertEquals(instancePartitions.getInstances(1, 1), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 5, SERVER_INSTANCE_ID_PREFIX + 9)); assertEquals(instancePartitions.getInstances(0, 2), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 3)); assertEquals(instancePartitions.getInstances(1, 2), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 6)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 0)); // ===== Test against the cases when the existing instancePartitions isn't null, // and minimizeDataMovement is set to true. ===== @@ -155,17 +155,17 @@ public void testDefaultOfflineReplicaGroup() { // p0, p0, p1 // p1 assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 8)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 1)); assertEquals(instancePartitions.getInstances(1, 0), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 8)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 2, SERVER_INSTANCE_ID_PREFIX + 9)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 2)); assertEquals(instancePartitions.getInstances(1, 1), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 5, SERVER_INSTANCE_ID_PREFIX + 9)); assertEquals(instancePartitions.getInstances(0, 2), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 3)); assertEquals(instancePartitions.getInstances(1, 2), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 6)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 0)); // Remove two instances (i2, i6) and add two new instances (i10, i11). instanceConfigs.remove(6); @@ -198,17 +198,17 @@ public void testDefaultOfflineReplicaGroup() { // p0, p0, p1 // p1 assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 8)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 1)); assertEquals(instancePartitions.getInstances(1, 0), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 8)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 10, SERVER_INSTANCE_ID_PREFIX + 9)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 10)); assertEquals(instancePartitions.getInstances(1, 1), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 5, SERVER_INSTANCE_ID_PREFIX + 9)); assertEquals(instancePartitions.getInstances(0, 2), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 3)); assertEquals(instancePartitions.getInstances(1, 2), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 11)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 11, SERVER_INSTANCE_ID_PREFIX + 0)); // Add 2 more instances to the ZK and increase the number of instances per replica group from 2 to 3. for (int i = numInstances + 2; i < numInstances + 4; i++) { @@ -227,31 +227,31 @@ public void testDefaultOfflineReplicaGroup() { // Math.abs("myTable_OFFLINE".hashCode()) % 12 = 2 // [i10, i11, i12, i13, i3, i4, i5, i11, i7, i8, i9, i0, i1] // For r0, the candidate instances are [i12, i13, i4, i7, i8, i1]. - // For p0, since the existing assignment is [i1, i8], the next available instance from the candidates is i12. + // For p0, since the existing assignment is [i8, i1], the next available instance from the candidates is i12. // For p1, the existing assignment is [i4, i8], the next available instance is also i12. // r0: [i12, i4, i8, i1] // For r1, the candidate instances become [i10, i13, i5, i7, i9]. - // For p0, since the existing assignment is [i10, i9], the next available instance is i13 (new instance). + // For p0, since the existing assignment is [i9, i10], the next available instance is i13 (new instance). // For p1, the existing assignment is [i5, i9], the next available one from the candidates is i10, but since // i10 is already used in the former partition, it got added to the tail, so the next available one is i13. // r1: [i10, i13, i5, i9] // For r2, the candidate instances become [i11, i3, i7, i0]. // For p0, the existing assignment is [i0, i3], the next available instance from the candidates is i11. - // For p1, the existing assignment is [i0, i11], the next available instance from the candidates is i3, but + // For p1, the existing assignment is [i11, i0], the next available instance from the candidates is i3, but // since i3 is already used in the former partition, it got appended to the tail, so the next available one is i7. // r2: [i11, i3, i7, i0] assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 12)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 12)); assertEquals(instancePartitions.getInstances(1, 0), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 12)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 10, SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 13)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 10, SERVER_INSTANCE_ID_PREFIX + 13)); assertEquals(instancePartitions.getInstances(1, 1), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 5, SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 13)); assertEquals(instancePartitions.getInstances(0, 2), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 11)); assertEquals(instancePartitions.getInstances(1, 2), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 11, SERVER_INSTANCE_ID_PREFIX + 7)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 11, SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 7)); // Reduce the number of instances per replica group from 3 to 2. numInstancesPerPartition = 2; @@ -264,17 +264,17 @@ public void testDefaultOfflineReplicaGroup() { // The instance assignment should be the same as the one without the newly added instances. assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 8)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 1)); assertEquals(instancePartitions.getInstances(1, 0), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 8)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 10, SERVER_INSTANCE_ID_PREFIX + 9)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 10)); assertEquals(instancePartitions.getInstances(1, 1), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 5, SERVER_INSTANCE_ID_PREFIX + 9)); assertEquals(instancePartitions.getInstances(0, 2), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 3)); assertEquals(instancePartitions.getInstances(1, 2), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 11)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 11, SERVER_INSTANCE_ID_PREFIX + 0)); // Add one more replica group (from 3 to 4). numReplicas = 4; @@ -291,17 +291,17 @@ public void testDefaultOfflineReplicaGroup() { // p0, p0, p1 // p1 assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 8)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 1)); assertEquals(instancePartitions.getInstances(1, 0), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 8)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 10, SERVER_INSTANCE_ID_PREFIX + 9)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 10)); assertEquals(instancePartitions.getInstances(1, 1), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 5, SERVER_INSTANCE_ID_PREFIX + 9)); assertEquals(instancePartitions.getInstances(0, 2), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 3)); assertEquals(instancePartitions.getInstances(1, 2), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 11)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 11, SERVER_INSTANCE_ID_PREFIX + 0)); assertEquals(instancePartitions.getInstances(0, 3), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 12, SERVER_INSTANCE_ID_PREFIX + 13)); assertEquals(instancePartitions.getInstances(1, 3), @@ -316,17 +316,17 @@ public void testDefaultOfflineReplicaGroup() { // The output should be the same as the one before adding one replica group. assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 8)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 1)); assertEquals(instancePartitions.getInstances(1, 0), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 8)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 10, SERVER_INSTANCE_ID_PREFIX + 9)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 10)); assertEquals(instancePartitions.getInstances(1, 1), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 5, SERVER_INSTANCE_ID_PREFIX + 9)); assertEquals(instancePartitions.getInstances(0, 2), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 3)); assertEquals(instancePartitions.getInstances(1, 2), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 11)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 11, SERVER_INSTANCE_ID_PREFIX + 0)); } @Test @@ -359,16 +359,19 @@ public void testPoolBased() { // Math.abs("myTable_OFFLINE".hashCode()) % 2 = 0 // All instances in pool 0 should be assigned to replica-group 0, and all instances in pool 1 should be assigned to // replica-group 1 + // Math.abs("myTable_OFFLINE".hashCode()) % 5 = 3 + // pool 0: [ i3, i4, i0, i1, i2 ] + // pool 1: [ i8, i9, i5, i6, i7 ] InstancePartitions instancePartitions = driver.assignInstances(InstancePartitionsType.OFFLINE, instanceConfigs, null); assertEquals(instancePartitions.getNumReplicaGroups(), numReplicaGroups); assertEquals(instancePartitions.getNumPartitions(), 1); assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2, - SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 0, + SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 5, SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 7, - SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 9)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 5, + SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 7)); // Add the third pool with same number of instances numPools = 3; @@ -387,15 +390,18 @@ public void testPoolBased() { // Pool 0 and 2 will be selected in the pool selection // All instances in pool 0 should be assigned to replica-group 0, and all instances in pool 2 should be assigned to // replica-group 1 + // Math.abs("myTable_OFFLINE".hashCode()) % 5 = 3 + // pool 0: [ i3, i4, i0, i1, i2 ] + // pool 2: [ i13, i14, i10, i11, i12 ] instancePartitions = driver.assignInstances(InstancePartitionsType.OFFLINE, instanceConfigs, null); assertEquals(instancePartitions.getNumReplicaGroups(), numReplicaGroups); assertEquals(instancePartitions.getNumPartitions(), 1); assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2, - SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 0, + SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 10, SERVER_INSTANCE_ID_PREFIX + 11, SERVER_INSTANCE_ID_PREFIX + 12, - SERVER_INSTANCE_ID_PREFIX + 13, SERVER_INSTANCE_ID_PREFIX + 14)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 13, SERVER_INSTANCE_ID_PREFIX + 14, SERVER_INSTANCE_ID_PREFIX + 10, + SERVER_INSTANCE_ID_PREFIX + 11, SERVER_INSTANCE_ID_PREFIX + 12)); // Select all 3 pools in pool selection tagPoolConfig = new InstanceTagPoolConfig(OFFLINE_TAG, true, numPools, null); @@ -405,15 +411,19 @@ public void testPoolBased() { // Math.abs("myTable_OFFLINE".hashCode()) % 3 = 2 // All instances in pool 2 should be assigned to replica-group 0, and all instances in pool 0 should be assigned to // replica-group 1 + // Math.abs("myTable_OFFLINE".hashCode()) % 5 = 3 + // The instances should be rotated 3 places + // pool 2: [ i13, i14, i10, i11, i12 ] + // pool 0: [ i3, i4, i0, i1, i2 ] instancePartitions = driver.assignInstances(InstancePartitionsType.OFFLINE, instanceConfigs, null); assertEquals(instancePartitions.getNumReplicaGroups(), numReplicaGroups); assertEquals(instancePartitions.getNumPartitions(), 1); assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 10, SERVER_INSTANCE_ID_PREFIX + 11, SERVER_INSTANCE_ID_PREFIX + 12, - SERVER_INSTANCE_ID_PREFIX + 13, SERVER_INSTANCE_ID_PREFIX + 14)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 13, SERVER_INSTANCE_ID_PREFIX + 14, SERVER_INSTANCE_ID_PREFIX + 10, + SERVER_INSTANCE_ID_PREFIX + 11, SERVER_INSTANCE_ID_PREFIX + 12)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2, - SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 0, + SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2)); // Select pool 0 and 1 in pool selection tagPoolConfig = new InstanceTagPoolConfig(OFFLINE_TAG, true, 0, Arrays.asList(0, 1)); @@ -423,15 +433,18 @@ public void testPoolBased() { // Math.abs("myTable_OFFLINE".hashCode()) % 2 = 0 // All instances in pool 0 should be assigned to replica-group 0, and all instances in pool 1 should be assigned to // replica-group 1 + // Math.abs("myTable_OFFLINE".hashCode()) % 5 = 3 + // pool 0: [ i3, i4, i0, i1, i2 ] + // pool 1: [ i8, i9, i5, i6, i7 ] instancePartitions = driver.assignInstances(InstancePartitionsType.OFFLINE, instanceConfigs, null); assertEquals(instancePartitions.getNumReplicaGroups(), numReplicaGroups); assertEquals(instancePartitions.getNumPartitions(), 1); assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2, - SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 0, + SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 5, SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 7, - SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 9)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 5, + SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 7)); // Assign instances from 2 pools to 3 replica-groups numReplicaGroups = numPools; @@ -453,11 +466,11 @@ public void testPoolBased() { assertEquals(instancePartitions.getNumReplicaGroups(), numReplicaGroups); assertEquals(instancePartitions.getNumPartitions(), 1); assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 3)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 0)); assertEquals(instancePartitions.getInstances(0, 1), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 9)); assertEquals(instancePartitions.getInstances(0, 2), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 4)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 1)); // ===== Test against the cases when the existing instancePartitions isn't null, // and minimizeDataMovement is set to true. ===== @@ -493,11 +506,11 @@ public void testPoolBased() { assertEquals(instancePartitions.getNumReplicaGroups(), numReplicaGroups); assertEquals(instancePartitions.getNumPartitions(), 1); assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2, - SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 0, + SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 5, SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 7, - SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 9)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 5, + SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 7)); // Get the latest existingPoolToInstancesMap from last computation and try again. // The actual assignment should be the same as last one. @@ -507,11 +520,11 @@ public void testPoolBased() { assertEquals(instancePartitions.getNumReplicaGroups(), numReplicaGroups); assertEquals(instancePartitions.getNumPartitions(), 1); assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2, - SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 0, + SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 5, SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 7, - SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 9)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 5, + SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 7)); // Select pool 0 and 1 in pool selection tagPoolConfig = new InstanceTagPoolConfig(OFFLINE_TAG, true, 0, Arrays.asList(0, 1)); @@ -533,11 +546,11 @@ public void testPoolBased() { assertEquals(instancePartitions.getNumReplicaGroups(), numReplicaGroups); assertEquals(instancePartitions.getNumPartitions(), 1); assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2, - SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 0, + SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 5, SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 7, - SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 9)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 5, + SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 7)); // Assign instances from 2 pools to 3 replica-groups numReplicaGroups = 3; @@ -557,26 +570,26 @@ public void testPoolBased() { // Latest instances from ZK: // pool 0: [ i3, i4, i0, i1, i2 ] // pool 1: [ i8, i9, i5, i6, i7 ] - // Due to the fact that in existing instancePartition instances are sorted, i0 and i1 will be retained for r0, - // i5 and i6 will be retained for r1. i3 and i4 are picked up from latest instances in the target pool. + // i3 and i4 will be retained for r0, i8 and i9 will be retained for r1. i0 and i1 are picked up from the latest + // instances in the target pool. // Thus, the new assignment will be as follows: - // pool 0: [i0, i1, i2, i3, i4] - // r0 r0 r2 r2 - // pool 1: [i5, i6, i7, i8, i9] - // r1 r1 + // pool 0: [ i3, i4, i0, i1, i2 ] + // r0 r0 r2 r2 + // pool 1: [ i8, i9, i5, i6, i7 ] + // r1 r1 instancePartitions = driver.assignInstances(InstancePartitionsType.OFFLINE, instanceConfigs, existingInstancePartitions); assertEquals(instancePartitions.getNumReplicaGroups(), numReplicaGroups); assertEquals(instancePartitions.getNumPartitions(), 1); assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 1)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 5, SERVER_INSTANCE_ID_PREFIX + 6)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 9)); assertEquals(instancePartitions.getInstances(0, 2), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 4)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 1)); // Remove one instance from each of the pools and add one more back. - instanceConfigs.remove(5); + instanceConfigs.remove(8); instanceConfigs.remove(3); int poolCount = 0; for (int i = numInstances; i < numInstances + 2; i++) { @@ -598,25 +611,25 @@ public void testPoolBased() { // Each replica-group should have 2 instances assigned // Math.abs("myTable_OFFLINE".hashCode()) % 5 = 3 // Latest instances from ZK: - // pool 0: [ i2, i4, i0, i1, i10 ] - // pool 1: [ i8, i9, i11, i6, i7 ] + // pool 0: [ i2, i4, i0, i1, i10 ] + // pool 1: [ i7, i9, i11, i5, i6 ] // i3 gets swapped out, the next available instance i2 will take its place. - // Similarly, i5 is swapped out and i8 will take its place. + // Similarly, i8 is swapped out and i7 will take its place. // Thus, the new assignment will be as follows: - // pool 0: [ i2, i4, i0, i1, i10 ] - // r2 r2 r0 r0 - // pool 1: [ i8, i9, i11, i6, i7 ] - // r1 r1 + // pool 0: [ i2, i4, i0, i1, i10 ] + // r0 r0 r2 r2 + // pool 1: [ i7, i9, i11, i5, i6 ] + // r1 r1 instancePartitions = driver.assignInstances(InstancePartitionsType.OFFLINE, instanceConfigs, existingInstancePartitions); assertEquals(instancePartitions.getNumReplicaGroups(), numReplicaGroups); assertEquals(instancePartitions.getNumPartitions(), 1); assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 1)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 2, SERVER_INSTANCE_ID_PREFIX + 4)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 6)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 7, SERVER_INSTANCE_ID_PREFIX + 9)); assertEquals(instancePartitions.getInstances(0, 2), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 2, SERVER_INSTANCE_ID_PREFIX + 4)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 1)); // Reduce number of replica groups from 3 to 2. numReplicaGroups = 2; @@ -633,26 +646,26 @@ public void testPoolBased() { // Each replica-group should have 2 instances assigned // Math.abs("myTable_OFFLINE".hashCode()) % 5 = 3 // Latest instances from ZK: - // pool 0: [ i2, i4, i0, i1, i10 ] - // pool 1: [ i8, i9, i11, i6, i7 ] - // In the existing instancePartitions, r0 already has [i0, i1], append the rest - // available instances (ie. [i2, i4, i10]) to the tail. - // r1 already has [i8, i6], append the rest available instances (ie. [i9, i11, i7]) to the tail. + // pool 0: [ i2, i4, i0, i1, i10 ] + // pool 1: [ i7, i9, i11, i5, i6 ] + // In the existing instancePartitions, r0 already has [i2, i4], append the rest available instances + // (ie. [i0, i1, i10]) to the tail. + // r1 already has [i7, i9], append the rest available instances (ie. [i11, i5, i6]) to the tail. // Thus, the new assignment will become: - // pool 0: [ i0, i1, i2, i4, i10 ] - // r0 r0 r0 r0 r0 - // pool 1: [ i8, i6, i9, i11, i7 ] - // r1 r1 r1 r1 r1 + // pool 0: [ i2, i4, i0, i1, i10 ] + // r0 r0 r0 r0 r0 + // pool 1: [ i7, i9, i11, i5, i6 ] + // r1 r1 r1 r1 r1 instancePartitions = driver.assignInstances(InstancePartitionsType.OFFLINE, instanceConfigs, existingInstancePartitions); assertEquals(instancePartitions.getNumReplicaGroups(), numReplicaGroups); assertEquals(instancePartitions.getNumPartitions(), 1); assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2, - SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 10)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 2, SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 0, + SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 10)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 9, - SERVER_INSTANCE_ID_PREFIX + 11, SERVER_INSTANCE_ID_PREFIX + 7)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 7, SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 11, + SERVER_INSTANCE_ID_PREFIX + 5, SERVER_INSTANCE_ID_PREFIX + 6)); // Add 1 more instances to each pool poolCount = 0; @@ -675,25 +688,25 @@ public void testPoolBased() { // Math.abs("myTable_OFFLINE".hashCode()) % 6 = 2 // Latest instances from ZK: // pool 0: [ i10, i12, i2, i4, i0, i1 ] - // pool 1: [ i6, i7, i8, i9, i11, i13 ] + // pool 1: [ i5, i6, i7, i9, i11, i13 ] // There is one more empty position for each of the replica groups. // Append the newly added instances (i.e. i12 and i13) to the tails. // Thus, the new assignment will become: - // pool 0: [ i0, i1, i2, i4, i10, i12 ] - // pool 1: [ i8, i6, i9, i11, i7, i13 ] + // pool 0: [ i2, i4, i0, i1, i10, i12 ] + // pool 1: [ i7, i9, i11, i5, i6, i13 ] instancePartitions = driver.assignInstances(InstancePartitionsType.OFFLINE, instanceConfigs, existingInstancePartitions); assertEquals(instancePartitions.getNumReplicaGroups(), numReplicaGroups); assertEquals(instancePartitions.getNumPartitions(), 1); assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 2, - SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 10, SERVER_INSTANCE_ID_PREFIX + 12)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 2, SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 0, + SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 10, SERVER_INSTANCE_ID_PREFIX + 12)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 9, - SERVER_INSTANCE_ID_PREFIX + 11, SERVER_INSTANCE_ID_PREFIX + 7, SERVER_INSTANCE_ID_PREFIX + 13)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 7, SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 11, + SERVER_INSTANCE_ID_PREFIX + 5, SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 13)); - // Remove one instances from each of the pools, i.e. i2 and i8. - instanceConfigs.remove(6); + // Remove one instances from each of the pools, i.e. i2 and i5. + instanceConfigs.remove(4); instanceConfigs.remove(2); // Get the latest existingInstancePartitions from last computation. @@ -707,21 +720,21 @@ public void testPoolBased() { // Latest instances from ZK: // pool 0: [ i12, i4, i0, i1, i10 ] // pool 1: [ i7, i9, i11, i13, i6 ] - // Since i2 and i8 got removed from the pools, - // the tail instances (i.e. i12 and 13) will be used to fill their vacant position. + // Since i2 and i5 got removed from the pools, the tail instances (i.e. i12 and 13) will be used to fill their + // vacant position. // Thus, the new assignment will become: - // pool 0: [ i0, i1, i12, i4, i10 ] - // pool 1: [ i13, i6, i9, i11, i7 ] + // pool 0: [ i12, i4, i0, i1, i10 ] + // pool 1: [ i7, i9, i11, i13, i6 ] instancePartitions = driver.assignInstances(InstancePartitionsType.OFFLINE, instanceConfigs, existingInstancePartitions); assertEquals(instancePartitions.getNumReplicaGroups(), numReplicaGroups); assertEquals(instancePartitions.getNumPartitions(), 1); assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 12, - SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 10)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 12, SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 0, + SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 10)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 13, SERVER_INSTANCE_ID_PREFIX + 6, SERVER_INSTANCE_ID_PREFIX + 9, - SERVER_INSTANCE_ID_PREFIX + 11, SERVER_INSTANCE_ID_PREFIX + 7)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 7, SERVER_INSTANCE_ID_PREFIX + 9, SERVER_INSTANCE_ID_PREFIX + 11, + SERVER_INSTANCE_ID_PREFIX + 13, SERVER_INSTANCE_ID_PREFIX + 6)); } @Test @@ -772,6 +785,8 @@ public void testIllegalConfig() { for (int i = 0; i < numInstances; i++) { expectedInstances.add(SERVER_INSTANCE_ID_PREFIX + i); } + // Math.abs("myTable_OFFLINE".hashCode()) % 10 = 8 + Collections.rotate(expectedInstances, -8); assertEquals(instancePartitions.getInstances(0, 0), expectedInstances); // Enable pool @@ -805,6 +820,8 @@ public void testIllegalConfig() { for (int i = 0; i < numInstances / 2; i++) { expectedInstances.add(SERVER_INSTANCE_ID_PREFIX + i); } + // Math.abs("myTable_OFFLINE".hashCode()) % 5 = 3 + Collections.rotate(expectedInstances, -3); assertEquals(instancePartitions.getInstances(0, 0), expectedInstances); tagPoolConfig = new InstanceTagPoolConfig(OFFLINE_TAG, true, 3, null); @@ -908,11 +925,11 @@ public void testIllegalConfig() { assertEquals(instancePartitions.getNumReplicaGroups(), 3); assertEquals(instancePartitions.getNumPartitions(), 1); assertEquals(instancePartitions.getInstances(0, 0), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 3)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 0)); assertEquals(instancePartitions.getInstances(0, 1), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 8, SERVER_INSTANCE_ID_PREFIX + 9)); assertEquals(instancePartitions.getInstances(0, 2), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 4)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 1)); // Illegal partition selector numInstances = 21; @@ -1002,9 +1019,8 @@ public void testIllegalConfig() { instancePartitions = driver.assignInstances(InstancePartitionsType.OFFLINE, instanceConfigs, null); fail(); } catch (IllegalStateException e) { - assertEquals(e.getMessage(), - "Not enough qualified instances, ask for: (numInstancesPerReplicaGroup: 6) * " - + "(numReplicaGroups: 4) = 24, having only 21"); + assertEquals(e.getMessage(), "Not enough qualified instances, ask for: (numInstancesPerReplicaGroup: 6) * " + + "(numReplicaGroups: 4) = 24, having only 21"); } numInstances = 10; @@ -1353,8 +1369,7 @@ public void testPoolBasedFDAware() { new InstanceReplicaGroupPartitionConfig(true, 0, numReplicaGroups, numInstancesPerReplicaGroup, numPartitions, numInstancesPerPartition, true); // Do not rotate for testing - instanceConstraintConfig = - new InstanceConstraintConfig(Arrays.asList("constraint1", "constraint2")); + instanceConstraintConfig = new InstanceConstraintConfig(Arrays.asList("constraint1", "constraint2")); tableConfig = new TableConfigBuilder(TableType.OFFLINE).setTableName(RAW_TABLE_NAME + TABLE_NAME_ZERO_HASH_COMPLEMENT) .setInstanceAssignmentConfigMap(Collections.singletonMap(InstancePartitionsType.OFFLINE, diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/TableRebalancerClusterStatelessTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/TableRebalancerClusterStatelessTest.java index 571bba642c95..100a8dcf1a56 100644 --- a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/TableRebalancerClusterStatelessTest.java +++ b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/TableRebalancerClusterStatelessTest.java @@ -221,12 +221,12 @@ public void testRebalance() assertEquals(instancePartitions.getInstances(0, 0), Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 2, SERVER_INSTANCE_ID_PREFIX + 5)); assertEquals(instancePartitions.getInstances(0, 1), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 0, SERVER_INSTANCE_ID_PREFIX + 3)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 3, SERVER_INSTANCE_ID_PREFIX + 0)); assertEquals(instancePartitions.getInstances(0, 2), - Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 1, SERVER_INSTANCE_ID_PREFIX + 4)); + Arrays.asList(SERVER_INSTANCE_ID_PREFIX + 4, SERVER_INSTANCE_ID_PREFIX + 1)); - // The assignment are based on replica-group 0 and mirrored to all the replica-groups, so server of index 0, 1, 2 - // should have the same segments assigned, and server of index 3, 4, 5 should have the same segments assigned, each + // The assignment are based on replica-group 0 and mirrored to all the replica-groups, so server of index 0, 1, 5 + // should have the same segments assigned, and server of index 2, 3, 4 should have the same segments assigned, each // with 5 segments newSegmentAssignment = rebalanceResult.getSegmentAssignment(); int numSegmentsOnServer0 = 0; @@ -238,11 +238,11 @@ public void testRebalance() numSegmentsOnServer0++; assertEquals(instanceStateMap.get(SERVER_INSTANCE_ID_PREFIX + 0), ONLINE); assertEquals(instanceStateMap.get(SERVER_INSTANCE_ID_PREFIX + 1), ONLINE); - assertEquals(instanceStateMap.get(SERVER_INSTANCE_ID_PREFIX + 2), ONLINE); + assertEquals(instanceStateMap.get(SERVER_INSTANCE_ID_PREFIX + 5), ONLINE); } else { + assertEquals(instanceStateMap.get(SERVER_INSTANCE_ID_PREFIX + 2), ONLINE); assertEquals(instanceStateMap.get(SERVER_INSTANCE_ID_PREFIX + 3), ONLINE); assertEquals(instanceStateMap.get(SERVER_INSTANCE_ID_PREFIX + 4), ONLINE); - assertEquals(instanceStateMap.get(SERVER_INSTANCE_ID_PREFIX + 5), ONLINE); } } assertEquals(numSegmentsOnServer0, numSegments / 2); @@ -402,8 +402,7 @@ public void testRebalanceWithTiers() String expectedPrefix; if (fixedTierSegments.contains(segment)) { expectedPrefix = NO_TIER_NAME + "_" + SERVER_INSTANCE_ID_PREFIX; - } else - if (segId > 4) { + } else if (segId > 4) { expectedPrefix = TIER_B_NAME + "_" + SERVER_INSTANCE_ID_PREFIX; } else if (segId > 2) { expectedPrefix = TIER_A_NAME + "_" + SERVER_INSTANCE_ID_PREFIX;