You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2011/06/16 21:55:29 UTC

svn commit: r1136632 - in /hbase/branches/0.90: CHANGES.txt src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java

Author: stack
Date: Thu Jun 16 19:55:29 2011
New Revision: 1136632

URL: http://svn.apache.org/viewvc?rev=1136632&view=rev
Log:
HBASE-3985 Same Region could be picked out twice in LoadBalancer

Modified:
    hbase/branches/0.90/CHANGES.txt
    hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java

Modified: hbase/branches/0.90/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/CHANGES.txt?rev=1136632&r1=1136631&r2=1136632&view=diff
==============================================================================
--- hbase/branches/0.90/CHANGES.txt (original)
+++ hbase/branches/0.90/CHANGES.txt Thu Jun 16 19:55:29 2011
@@ -31,6 +31,8 @@ Release 0.90.4 - Unreleased
    HBASE-3794  Ability to Discard Bad HTable Puts
    HBASE-3916  Fix the default bind address of ThriftServer to be wildcard
                instead of localhost. (Li Pi)
+   HBASE-3985  Same Region could be picked out twice in LoadBalancer
+               (Jieshan Bean)
 
   IMPROVEMENT
    HBASE-3882  hbase-config.sh needs to be updated so it can auto-detects the

Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java?rev=1136632&r1=1136631&r2=1136632&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java Thu Jun 16 19:55:29 2011
@@ -164,13 +164,21 @@ public class LoadBalancer {
       return null;
     }
     int numRegions = 0;
+    StringBuilder strBalanceParam = new StringBuilder("Server information: ");
+    
     // Iterate so we can count regions as we build the map
     for(Map.Entry<HServerInfo, List<HRegionInfo>> server:
         clusterState.entrySet()) {
       server.getKey().getLoad().setNumberOfRegions(server.getValue().size());
       numRegions += server.getKey().getLoad().getNumberOfRegions();
       serversByLoad.put(server.getKey(), server.getValue());
-    }
+      
+      strBalanceParam.append(server.getKey().getServerName()).append("=")
+          .append(server.getValue().size()).append(", ");
+    }
+    strBalanceParam.delete(strBalanceParam.length() - 2,
+        strBalanceParam.length());
+    LOG.debug(strBalanceParam.toString());
 
     // Check if we even need to do any load balancing
     float average = (float)numRegions / numServers; // for logging
@@ -189,6 +197,13 @@ public class LoadBalancer {
     int min = numRegions / numServers;
     int max = numRegions % numServers == 0 ? min : min + 1;
 
+    // Using to check banance result.
+    strBalanceParam.delete(0, strBalanceParam.length());
+    strBalanceParam.append("Balance parameter: numRegions=").append(numRegions)
+        .append(", numServers=").append(numServers).append(", max=").append(max)
+        .append(", min=").append(min);
+    LOG.debug(strBalanceParam.toString());
+    
     // Balance the cluster
     // TODO: Look at data block locality or a more complex load to do this
     List<RegionPlan> regionsToMove = new ArrayList<RegionPlan>();
@@ -210,8 +225,8 @@ public class LoadBalancer {
       List<HRegionInfo> regions = randomize(server.getValue());
       int numToOffload = Math.min(regionCount - max, regions.size());
       int numTaken = 0;
-      for (int i = regions.size() - 1; i >= 0; i--) {
-        HRegionInfo hri = regions.get(i);
+      
+      for (HRegionInfo hri: regions) {
         // Don't rebalance meta regions.
         if (hri.isMetaRegion()) continue;
         regionsToMove.add(new RegionPlan(hri, serverInfo, null));