From 55a7c872948c583dcbf4c82ebca047dc21e03b98 Mon Sep 17 00:00:00 2001 From: Zhihong Yu Date: Tue, 11 Mar 2014 00:41:31 +0000 Subject: [PATCH 18/45] 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 --- .../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java index 394f8dd..253498d 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java +++ 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. -- 2.0.0