Selaa lähdekoodia

HDFS-10319. Balancer should not try to pair storages with different types.

Tsz-Wo Nicholas Sze 9 vuotta sitten
vanhempi
commit
bbce1d525e

+ 8 - 2
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/balancer/Balancer.java

@@ -525,8 +525,7 @@ public class Balancer {
         final C c = candidates.next();
         final C c = candidates.next();
         if (!c.hasSpaceForScheduling()) {
         if (!c.hasSpaceForScheduling()) {
           candidates.remove();
           candidates.remove();
-        } else if (matcher.match(dispatcher.getCluster(),
-            g.getDatanodeInfo(), c.getDatanodeInfo())) {
+        } else if (matchStorageGroups(c, g, matcher)) {
           return c;
           return c;
         }
         }
       }
       }
@@ -534,6 +533,13 @@ public class Balancer {
     return null;
     return null;
   }
   }
 
 
+  private boolean matchStorageGroups(StorageGroup left, StorageGroup right,
+      Matcher matcher) {
+    return left.getStorageType() == right.getStorageType()
+        && matcher.match(dispatcher.getCluster(),
+            left.getDatanodeInfo(), right.getDatanodeInfo());
+  }
+
   /* reset all fields in a balancer preparing for the next iteration */
   /* reset all fields in a balancer preparing for the next iteration */
   void resetData(Configuration conf) {
   void resetData(Configuration conf) {
     this.overUtilized.clear();
     this.overUtilized.clear();