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.

Reply via email to