Browse Source

Merage r1080836 from trunk to federation.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/hdfs/branches/HDFS-1052@1081609 13f79535-47bb-0310-9956-ffa450edef68
Tsz-wo Sze 14 years ago
parent
commit
1c4f37e3d8
2 changed files with 8 additions and 5 deletions
  1. 2 0
      CHANGES.txt
  2. 6 5
      src/java/org/apache/hadoop/hdfs/server/balancer/Balancer.java

+ 2 - 0
CHANGES.txt

@@ -338,6 +338,8 @@ Trunk (unreleased changes)
     HDFS-1691. Remove a duplicated static initializer for reading default
     configurations in DFSck.  (Alexey Diomin via szetszwo)
 
+    HDFS-1748. Balancer utilization classification is incomplete.  (szetszwo)
+
 Release 0.22.0 - Unreleased
 
   NEW FEATURES

+ 6 - 5
src/java/org/apache/hadoop/hdfs/server/balancer/Balancer.java

@@ -834,11 +834,12 @@ public class Balancer {
         }
       } else {
         datanodeS = new BalancerDatanode(datanode, policy, threshold);
-        if ( isBelowAvgUtilized(datanodeS)) {
+        if ( isBelowOrEqualAvgUtilized(datanodeS)) {
           this.belowAvgUtilizedDatanodes.add(datanodeS);
         } else {
-          assert (isUnderUtilized(datanodeS)) :
-            datanodeS.getName()+ "is not an underUtilized node"; 
+          assert isUnderUtilized(datanodeS) : "isUnderUtilized("
+              + datanodeS.getName() + ")=" + isUnderUtilized(datanodeS)
+              + ", utilization=" + datanodeS.utilization; 
           this.underUtilizedDatanodes.add(datanodeS);
           underLoadedBytes += (long)((avg-threshold-
               datanodeS.utilization)*datanodeS.datanode.getCapacity()/100.0);
@@ -1273,10 +1274,10 @@ public class Balancer {
 
   /* Return true if the given datanode is below average utilized 
    * but not underUtilized */
-  private boolean isBelowAvgUtilized(BalancerDatanode datanode) {
+  private boolean isBelowOrEqualAvgUtilized(BalancerDatanode datanode) {
     final double avg = policy.getAvgUtilization();
     return (datanode.utilization >= (avg-threshold))
-             && (datanode.utilization < avg);
+             && (datanode.utilization <= avg);
   }
 
   // Exit status