Skip to content

Commit 1b1e072

Browse files
huizhiluJiajun Wang
authored andcommitted
Change calculation for baseline divergence. (#598)
Change the calculation for baseline divergence: 0.0 means no difference, 1.0 means all are different.
1 parent c5122b3 commit 1b1e072

3 files changed

Lines changed: 11 additions & 9 deletions

File tree

helix-core/src/main/java/org/apache/helix/controller/rebalancer/util/ResourceUsageCalculator.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,9 @@ public static Map<String, Integer> getResourceUsage(ResourcesStateMap resourceAs
8181
* }
8282
* }
8383
* }
84-
* baseline divergence = (matched: 1) / (total(matched + doesn't match): 3) = 1/3 ~= 0.333
84+
* baseline divergence = (doesn't match: 2) / (total(matched + doesn't match): 3) = 2/3 ~= 0.66667
85+
* If divergence == 1.0, all are different(no match); divergence == 0.0, no difference.
86+
*
8587
* @param baseline baseline assignment
8688
* @param bestPossibleAssignment best possible assignment
8789
* @return double value range at [0.0, 1.0]
@@ -137,7 +139,7 @@ public static double measureBaselineDivergence(Map<String, ResourceAssignment> b
137139
}
138140
}
139141

140-
return numTotalBestPossibleReplicas == 0 ? 0.0d
141-
: (double) numMatchedReplicas / (double) numTotalBestPossibleReplicas;
142+
return numTotalBestPossibleReplicas == 0 ? 1.0d
143+
: (1.0d - (double) numMatchedReplicas / (double) numTotalBestPossibleReplicas);
142144
}
143145
}

helix-core/src/test/java/org/apache/helix/controller/rebalancer/util/TestResourceUsageCalculator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,19 @@ public void testMeasureBaselineDivergence(Map<String, Map<String, Map<String, St
4545

4646
// Empty best possible assignment.
4747
Assert.assertEquals(ResourceUsageCalculator
48-
.measureBaselineDivergence(baselineAssignment, Collections.emptyMap()), 0.0d);
48+
.measureBaselineDivergence(baselineAssignment, Collections.emptyMap()), 1.0d);
4949
// Empty baseline assignment.
5050
Assert.assertEquals(ResourceUsageCalculator
51-
.measureBaselineDivergence(Collections.emptyMap(), noMatchBestPossibleAssignment), 0.0d);
51+
.measureBaselineDivergence(Collections.emptyMap(), noMatchBestPossibleAssignment), 1.0d);
5252

5353
Assert.assertEquals(ResourceUsageCalculator
54-
.measureBaselineDivergence(baselineAssignment, noMatchBestPossibleAssignment), 0.0d);
54+
.measureBaselineDivergence(baselineAssignment, noMatchBestPossibleAssignment), 1.0d);
5555
Assert.assertEquals(ResourceUsageCalculator
5656
.measureBaselineDivergence(baselineAssignment, someMatchBestPossibleAssignment),
57-
(double) 1 / (double) 3);
57+
(1.0d - (double) 1 / (double) 3));
5858
Assert.assertEquals(
5959
ResourceUsageCalculator.measureBaselineDivergence(baselineAssignment, baselineAssignment),
60-
1.0d);
60+
0.0d);
6161
}
6262

6363
private Map<String, ResourceAssignment> buildResourceAssignment(

helix-core/src/test/java/org/apache/helix/controller/rebalancer/waged/TestWagedRebalancerMetrics.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public void testWagedRebalanceMetrics()
138138
// Wait for asyncReportBaselineDivergenceGauge to complete and verify.
139139
Assert.assertTrue(TestHelper.verify(() -> (double) metricCollector.getMetric(
140140
WagedRebalancerMetricCollector.WagedRebalancerMetricNames.BaselineDivergenceGauge.name(),
141-
RatioMetric.class).getLastEmittedMetricValue() == 1.0d, TestHelper.WAIT_DURATION));
141+
RatioMetric.class).getLastEmittedMetricValue() == 0.0d, TestHelper.WAIT_DURATION));
142142
}
143143

144144
@Override

0 commit comments

Comments
 (0)