This is an automated email from the ASF dual-hosted git repository. jxue pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/helix.git
commit abd91cc3757d6bcb99f07b288264d68dbbf8cdb4 Author: Junkai Xue <[email protected]> AuthorDate: Wed Feb 6 12:08:46 2019 -0800 Revert back for N -> N+1 fix --- .../helix/controller/rebalancer/DelayedAutoRebalancer.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/helix-core/src/main/java/org/apache/helix/controller/rebalancer/DelayedAutoRebalancer.java b/helix-core/src/main/java/org/apache/helix/controller/rebalancer/DelayedAutoRebalancer.java index 62ad37f..1d00d60 100644 --- a/helix-core/src/main/java/org/apache/helix/controller/rebalancer/DelayedAutoRebalancer.java +++ b/helix-core/src/main/java/org/apache/helix/controller/rebalancer/DelayedAutoRebalancer.java @@ -529,7 +529,7 @@ public class DelayedAutoRebalancer extends AbstractRebalancer<ResourceController // we should drop all partitions from previous assigned instances. if (!currentMapWithPreferenceList.values().contains(HelixDefinedState.ERROR.name()) && bestPossibleStateMap.size() > numReplicas && readyToDrop(currentStateMap, - bestPossibleStateMap, preferenceList, combinedPreferenceList)) { + bestPossibleStateMap, numReplicas, combinedPreferenceList)) { for (int i = 0; i < combinedPreferenceList.size() - numReplicas; i++) { String instanceToDrop = combinedPreferenceList.get(combinedPreferenceList.size() - i - 1); bestPossibleStateMap.put(instanceToDrop, HelixDefinedState.DROPPED.name()); @@ -551,15 +551,13 @@ public class DelayedAutoRebalancer extends AbstractRebalancer<ResourceController } private boolean readyToDrop(Map<String, String> currentStateMap, - Map<String, String> bestPossibleMap, List<String> preferenceList, - List<String> combinedPreferenceList) { + Map<String, String> bestPossibleMap, int numReplicas, List<String> combinedPreferenceList) { if (currentStateMap.size() != bestPossibleMap.size()) { return false; } - Set<String> tmpPreferenceSet = new HashSet<>(preferenceList); - tmpPreferenceSet.retainAll(combinedPreferenceList); - - for (String instance : tmpPreferenceSet) { + + for (int i = 0; i < numReplicas; i++) { + String instance = combinedPreferenceList.get(i); if (!currentStateMap.containsKey(instance) || !currentStateMap.get(instance) .equals(bestPossibleMap.get(instance))) { return false;
