You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by ji...@apache.org on 2019/10/07 21:12:30 UTC
[helix] 27/37: Improve ResourceTopStateAntiAffinityConstraint (#475)
This is an automated email from the ASF dual-hosted git repository.
jiajunwang pushed a commit to branch wagedRebalancer2
in repository https://gitbox.apache.org/repos/asf/helix.git
commit eb95a19f900a472405c383185dba7e0d7085adf5
Author: Yi Wang <i3...@gmail.com>
AuthorDate: Tue Sep 17 10:09:49 2019 -0700
Improve ResourceTopStateAntiAffinityConstraint (#475)
- fix the min max range to be [0,1]
- add unit test for normalized score
---
.../ResourceTopStateAntiAffinityConstraint.java | 11 ++++++++--
...TestResourceTopStateAntiAffinityConstraint.java | 25 ++++++++++++++++++----
2 files changed, 30 insertions(+), 6 deletions(-)
diff --git a/helix-core/src/main/java/org/apache/helix/controller/rebalancer/waged/constraints/ResourceTopStateAntiAffinityConstraint.java b/helix-core/src/main/java/org/apache/helix/controller/rebalancer/waged/constraints/ResourceTopStateAntiAffinityConstraint.java
index b1e64b9..8681dc5 100644
--- a/helix-core/src/main/java/org/apache/helix/controller/rebalancer/waged/constraints/ResourceTopStateAntiAffinityConstraint.java
+++ b/helix-core/src/main/java/org/apache/helix/controller/rebalancer/waged/constraints/ResourceTopStateAntiAffinityConstraint.java
@@ -28,12 +28,19 @@ import org.apache.helix.controller.rebalancer.waged.model.ClusterContext;
* The higher number the number of top state partitions assigned to the instance, the lower the
* score, vice versa.
*/
-public class ResourceTopStateAntiAffinityConstraint extends SoftConstraint {
+class ResourceTopStateAntiAffinityConstraint extends SoftConstraint {
+ private static final float MAX_SCORE = 1f;
+ private static final float MIN_SCORE = 0f;
+
+ ResourceTopStateAntiAffinityConstraint() {
+ super(MAX_SCORE, MIN_SCORE);
+ }
+
@Override
protected float getAssignmentScore(AssignableNode node, AssignableReplica replica,
ClusterContext clusterContext) {
if (!replica.isReplicaTopState()) {
- return (getMaxScore() + getMinScore()) / 2;
+ return (getMaxScore() + getMinScore()) / 2.0f;
}
int curTopPartitionCountForResource = node.getAssignedTopStatePartitionsCount();
diff --git a/helix-core/src/test/java/org/apache/helix/controller/rebalancer/waged/constraints/TestResourceTopStateAntiAffinityConstraint.java b/helix-core/src/test/java/org/apache/helix/controller/rebalancer/waged/constraints/TestResourceTopStateAntiAffinityConstraint.java
index 06ef537..c3414d4 100644
--- a/helix-core/src/test/java/org/apache/helix/controller/rebalancer/waged/constraints/TestResourceTopStateAntiAffinityConstraint.java
+++ b/helix-core/src/test/java/org/apache/helix/controller/rebalancer/waged/constraints/TestResourceTopStateAntiAffinityConstraint.java
@@ -27,20 +27,31 @@ import org.apache.helix.controller.rebalancer.waged.model.AssignableReplica;
import org.apache.helix.controller.rebalancer.waged.model.ClusterContext;
import org.mockito.Mockito;
import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class TestResourceTopStateAntiAffinityConstraint {
- private final AssignableReplica _testReplica = Mockito.mock(AssignableReplica.class);
- private final AssignableNode _testNode = Mockito.mock(AssignableNode.class);
- private final ClusterContext _clusterContext = Mockito.mock(ClusterContext.class);
+ private AssignableReplica _testReplica;
+ private AssignableNode _testNode;
+ private ClusterContext _clusterContext;
private final SoftConstraint _constraint = new ResourceTopStateAntiAffinityConstraint();
+ @BeforeMethod
+ public void init() {
+ _testReplica = Mockito.mock(AssignableReplica.class);
+ _testNode = Mockito.mock(AssignableNode.class);
+ _clusterContext = Mockito.mock(ClusterContext.class);
+ }
+
@Test
public void testGetAssignmentScoreWhenReplicaNotTopState() {
when(_testReplica.isReplicaTopState()).thenReturn(false);
float score = _constraint.getAssignmentScore(_testNode, _testReplica, _clusterContext);
- Assert.assertEquals(score, (_constraint.getMaxScore() + _constraint.getMinScore()) / 2);
+ float normalizedScore =
+ _constraint.getAssignmentNormalizedScore(_testNode, _testReplica, _clusterContext);
+ Assert.assertEquals(score, 0.5f);
+ Assert.assertEquals(normalizedScore, 0.5f);
verifyZeroInteractions(_testNode);
verifyZeroInteractions(_clusterContext);
}
@@ -51,7 +62,10 @@ public class TestResourceTopStateAntiAffinityConstraint {
when(_testNode.getAssignedTopStatePartitionsCount()).thenReturn(20);
when(_clusterContext.getEstimatedMaxTopStateCount()).thenReturn(20);
float score = _constraint.getAssignmentScore(_testNode, _testReplica, _clusterContext);
+ float normalizedScore =
+ _constraint.getAssignmentNormalizedScore(_testNode, _testReplica, _clusterContext);
Assert.assertEquals(score, 0.5f);
+ Assert.assertEquals(normalizedScore, 0.5f);
}
@Test
@@ -60,6 +74,9 @@ public class TestResourceTopStateAntiAffinityConstraint {
when(_testNode.getAssignedTopStatePartitionsCount()).thenReturn(0);
when(_clusterContext.getEstimatedMaxTopStateCount()).thenReturn(20);
float score = _constraint.getAssignmentScore(_testNode, _testReplica, _clusterContext);
+ float normalizedScore =
+ _constraint.getAssignmentNormalizedScore(_testNode, _testReplica, _clusterContext);
Assert.assertEquals(score, 1f);
+ Assert.assertEquals(normalizedScore, 1f);
}
}