From bbce1d525e0016c9b8e573b86af3c87aa39582bd Mon Sep 17 00:00:00 2001 From: Tsz-Wo Nicholas Sze Date: Thu, 21 Apr 2016 15:20:12 -0700 Subject: [PATCH] HDFS-10319. Balancer should not try to pair storages with different types. --- .../apache/hadoop/hdfs/server/balancer/Balancer.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/balancer/Balancer.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/balancer/Balancer.java index a7600e00913..3169faf6a85 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/balancer/Balancer.java +++ b/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(); if (!c.hasSpaceForScheduling()) { candidates.remove(); - } else if (matcher.match(dispatcher.getCluster(), - g.getDatanodeInfo(), c.getDatanodeInfo())) { + } else if (matchStorageGroups(c, g, matcher)) { return c; } } @@ -534,6 +533,13 @@ public class Balancer { 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 */ void resetData(Configuration conf) { this.overUtilized.clear();