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:51:34 UTC
svn commit: r1136629 - in /hbase/trunk: CHANGES.txt
src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java
Author: stack
Date: Thu Jun 16 19:51:34 2011
New Revision: 1136629
URL: http://svn.apache.org/viewvc?rev=1136629&view=rev
Log:
HBASE-3985 Same Region could be picked out twice in LoadBalance
Modified:
hbase/trunk/CHANGES.txt
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java
Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1136629&r1=1136628&r2=1136629&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Thu Jun 16 19:51:34 2011
@@ -331,6 +331,8 @@ Release 0.90.4 - Unreleased
hmaster becomes the active one (Jieshan Bean)
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 LoadBalance
+ (Jieshan Bean)
IMPROVEMENT
HBASE-3882 hbase-config.sh needs to be updated so it can auto-detects the
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java?rev=1136629&r1=1136628&r2=1136629&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java Thu Jun 16 19:51:34 2011
@@ -222,6 +222,7 @@ public class LoadBalancer {
NavigableMap<ServerAndLoad, List<HRegionInfo>> serversByLoad =
new TreeMap<ServerAndLoad, List<HRegionInfo>>();
int numRegions = 0;
+ StringBuilder strBalanceParam = new StringBuilder("Server information: ");
// Iterate so we can count regions as we build the map
for (Map.Entry<ServerName, List<HRegionInfo>> server: clusterState.entrySet()) {
List<HRegionInfo> regions = server.getValue();
@@ -229,7 +230,12 @@ public class LoadBalancer {
if (sz == 0) emptyRegionServerPresent = true;
numRegions += sz;
serversByLoad.put(new ServerAndLoad(server.getKey(), sz), regions);
+ 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
@@ -249,6 +255,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
MinMaxPriorityQueue<RegionPlan> regionsToMove =