This is an automated email from the ASF dual-hosted git repository.
jiajunwang pushed a commit to branch wagedRebalancer
in repository https://gitbox.apache.org/repos/asf/helix.git
The following commit(s) were added to refs/heads/wagedRebalancer by this push:
new be1f041 Load soft constraint weight from resources/properties file
(#492)
be1f041 is described below
commit be1f041c2d98744570243473a366031b7b707f15
Author: Yi Wang <[email protected]>
AuthorDate: Wed Oct 2 16:29:40 2019 -0700
Load soft constraint weight from resources/properties file (#492)
Load the soft constraint's weight from a properties file.
It makes easier for us to adjust weights in the future.
---
.../java/org/apache/helix/SystemPropertyKeys.java | 2 +
.../ConstraintBasedAlgorithmFactory.java | 48 +++++++++++++++++-----
.../resources/soft-constraint-weight.properties | 24 +++++++++++
3 files changed, 63 insertions(+), 11 deletions(-)
diff --git a/helix-core/src/main/java/org/apache/helix/SystemPropertyKeys.java
b/helix-core/src/main/java/org/apache/helix/SystemPropertyKeys.java
index 047d1e8..cff46fc 100644
--- a/helix-core/src/main/java/org/apache/helix/SystemPropertyKeys.java
+++ b/helix-core/src/main/java/org/apache/helix/SystemPropertyKeys.java
@@ -6,6 +6,8 @@ public class SystemPropertyKeys {
// ZKHelixManager
public static final String CLUSTER_MANAGER_VERSION =
"cluster-manager-version.properties";
+ // soft constraints weight definitions
+ public static final String SOFT_CONSTRAINT_WEIGHTS =
"soft-constraint-weight.properties";
public static final String FLAPPING_TIME_WINDOW =
"helixmanager.flappingTimeWindow";
diff --git
a/helix-core/src/main/java/org/apache/helix/controller/rebalancer/waged/constraints/ConstraintBasedAlgorithmFactory.java
b/helix-core/src/main/java/org/apache/helix/controller/rebalancer/waged/constraints/ConstraintBasedAlgorithmFactory.java
index 657fc82..f70de9a 100644
---
a/helix-core/src/main/java/org/apache/helix/controller/rebalancer/waged/constraints/ConstraintBasedAlgorithmFactory.java
+++
b/helix-core/src/main/java/org/apache/helix/controller/rebalancer/waged/constraints/ConstraintBasedAlgorithmFactory.java
@@ -19,14 +19,19 @@ package
org.apache.helix.controller.rebalancer.waged.constraints;
* under the License.
*/
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
+import org.apache.helix.HelixManagerProperties;
+import org.apache.helix.SystemPropertyKeys;
import org.apache.helix.controller.rebalancer.waged.RebalanceAlgorithm;
import org.apache.helix.model.ClusterConfig;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Maps;
+
/**
* The factory class to create an instance of {@link ConstraintBasedAlgorithm}
*/
@@ -36,11 +41,29 @@ public class ConstraintBasedAlgorithmFactory {
// enlarge the overall weight of the evenness constraints compared with the
movement constraint.
// TODO: Tune or make the following factor configurable.
private static final int EVENNESS_PREFERENCE_NORMALIZE_FACTOR = 50;
+ private static final Map<String, Float> MODEL = new HashMap<>() {
+ {
+ // The default setting
+ put(PartitionMovementConstraint.class.getSimpleName(), 1f);
+ put(InstancePartitionsCountConstraint.class.getSimpleName(), 0.3f);
+ put(ResourcePartitionAntiAffinityConstraint.class.getSimpleName(), 0.1f);
+ put(ResourceTopStateAntiAffinityConstraint.class.getSimpleName(), 0.1f);
+ put(MaxCapacityUsageInstanceConstraint.class.getSimpleName(), 0.5f);
+ }
+ };
+
+ static {
+ Properties properties =
+ new
HelixManagerProperties(SystemPropertyKeys.SOFT_CONSTRAINT_WEIGHTS).getProperties();
+ // overwrite the default value with data load from property file
+ properties.forEach((constraintName, weight) ->
MODEL.put(String.valueOf(constraintName),
+ Float.valueOf(String.valueOf(weight))));
+ }
public static RebalanceAlgorithm getInstance(
Map<ClusterConfig.GlobalRebalancePreferenceKey, Integer> preferences) {
- List<HardConstraint> hardConstraints = ImmutableList
- .of(new FaultZoneAwareConstraint(), new NodeCapacityConstraint(),
+ List<HardConstraint> hardConstraints =
+ ImmutableList.of(new FaultZoneAwareConstraint(), new
NodeCapacityConstraint(),
new ReplicaActivateConstraint(), new
NodeMaxPartitionLimitConstraint(),
new ValidGroupTagConstraint(), new
SamePartitionOnInstanceConstraint());
@@ -52,13 +75,16 @@ public class ConstraintBasedAlgorithmFactory {
float evennessRatio = (float) evennessPreference / (evennessPreference +
movementPreference);
float movementRatio = (float) movementPreference / (evennessPreference +
movementPreference);
- Map<SoftConstraint, Float> softConstraints = ImmutableMap.<SoftConstraint,
Float>builder()
- .put(new PartitionMovementConstraint(), movementRatio)
- .put(new InstancePartitionsCountConstraint(), 0.3f * evennessRatio)
- .put(new ResourcePartitionAntiAffinityConstraint(), 0.1f *
evennessRatio)
- .put(new ResourceTopStateAntiAffinityConstraint(), 0.1f *
evennessRatio)
- .put(new MaxCapacityUsageInstanceConstraint(), 0.5f *
evennessRatio).build();
+ List<SoftConstraint> softConstraints = ImmutableList.of(new
PartitionMovementConstraint(),
+ new InstancePartitionsCountConstraint(), new
ResourcePartitionAntiAffinityConstraint(),
+ new ResourceTopStateAntiAffinityConstraint(), new
MaxCapacityUsageInstanceConstraint());
+ Map<SoftConstraint, Float> softConstraintsWithWeight =
Maps.toMap(softConstraints, key -> {
+ String name = key.getClass().getSimpleName();
+ float weight = MODEL.get(name);
+ return name.equals(PartitionMovementConstraint.class.getSimpleName()) ?
movementRatio * weight
+ : evennessRatio * weight;
+ });
- return new ConstraintBasedAlgorithm(hardConstraints, softConstraints);
+ return new ConstraintBasedAlgorithm(hardConstraints,
softConstraintsWithWeight);
}
}
diff --git a/helix-core/src/main/resources/soft-constraint-weight.properties
b/helix-core/src/main/resources/soft-constraint-weight.properties
new file mode 100644
index 0000000..3e87c9d
--- /dev/null
+++ b/helix-core/src/main/resources/soft-constraint-weight.properties
@@ -0,0 +1,24 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+PartitionMovementConstraint=1f
+InstancePartitionsCountConstraint=0.3f
+ResourcePartitionAntiAffinityConstraint=0.1f
+ResourceTopStateAntiAffinityConstraint=0.1f
+MaxCapacityUsageInstanceConstraint=0.5f
\ No newline at end of file