HBASE-10704 BaseLoadBalancer#roundRobinAssignment() may add same region to assignment plan multiple times
git-svn-id: https://svn.apache.org/repos/asf/hbase/branches/hbase-10070@1576156 13f79535-47bb-0310-9956-ffa450edef68 Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/55a7c872 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/55a7c872 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/55a7c872 Branch: refs/heads/master Commit: 55a7c872948c583dcbf4c82ebca047dc21e03b98 Parents: c2f6f47 Author: Zhihong Yu <te...@apache.org> Authored: Tue Mar 11 00:41:31 2014 +0000 Committer: Enis Soztutar <e...@apache.org> Committed: Fri Jun 27 16:39:38 2014 -0700 ---------------------------------------------------------------------- .../apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/55a7c872/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java index 394f8dd..253498d 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java @@ -1159,6 +1159,7 @@ public abstract class BaseLoadBalancer implements LoadBalancer { // assign the remaining by going through the list and try to assign to servers one-by-one int serverIdx = RANDOM.nextInt(numServers); for (HRegionInfo region : unassignedRegions) { + boolean assigned = false; for (int j = 0; j < numServers; j++) { // try all servers one by one ServerName serverName = servers.get((j + serverIdx) % numServers); if (serverName.equals(masterServerName)) { @@ -1173,11 +1174,13 @@ public abstract class BaseLoadBalancer implements LoadBalancer { serverRegions.add(region); cluster.doAssignRegion(region, serverName); serverIdx = (j + serverIdx + 1) % numServers; //remain from next server + assigned = true; break; - } else { - lastFewRegions.add(region); } } + if (!assigned) { + lastFewRegions.add(region); + } } // just sprinkle the rest of the regions on random regionservers. The balanceCluster will // make it optimal later. we can end up with this if numReplicas > numServers.