Skip to content

Commit d5b836b

Browse files
authored
HDFS-17655. Cannot run HDFS balancer with BlockPlacementPolicyWithNodeGroup (#7141). Contributed by YUBI LEE.
Signed-off-by: He Xiaoqiao <[email protected]>
1 parent 71b3a64 commit d5b836b

File tree

2 files changed

+21
-1
lines changed
  • hadoop-hdfs-project/hadoop-hdfs/src

2 files changed

+21
-1
lines changed

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.apache.hadoop.metrics2.source.JvmMetrics;
4444
import org.apache.hadoop.classification.VisibleForTesting;
4545
import org.apache.hadoop.hdfs.DFSUtilClient;
46+
import org.apache.hadoop.net.NetworkTopology;
4647
import org.slf4j.Logger;
4748
import org.slf4j.LoggerFactory;
4849
import org.apache.hadoop.HadoopIllegalArgumentException;
@@ -255,7 +256,7 @@ public class Balancer {
255256
private static void checkReplicationPolicyCompatibility(Configuration conf
256257
) throws UnsupportedActionException {
257258
BlockPlacementPolicies placementPolicies =
258-
new BlockPlacementPolicies(conf, null, null, null);
259+
new BlockPlacementPolicies(conf, null, NetworkTopology.getInstance(conf), null);
259260
if (!(placementPolicies.getPolicy(CONTIGUOUS) instanceof
260261
BlockPlacementPolicyDefault)) {
261262
throw new UnsupportedActionException(

hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/balancer/TestBalancer.java

+19
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.apache.hadoop.hdfs.server.balancer;
1919

2020
import static org.apache.hadoop.fs.CommonConfigurationKeys.IPC_CLIENT_CONNECT_MAX_RETRIES_ON_SASL_KEY;
21+
import static org.apache.hadoop.fs.CommonConfigurationKeysPublic.NET_TOPOLOGY_IMPL_KEY;
2122
import static org.apache.hadoop.fs.StorageType.DEFAULT;
2223
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_CLIENT_HTTPS_KEYSTORE_RESOURCE_KEY;
2324
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_SERVER_HTTPS_KEYSTORE_RESOURCE_KEY;
@@ -40,6 +41,8 @@
4041

4142
import java.lang.reflect.Field;
4243
import org.apache.hadoop.hdfs.protocol.ErasureCodingPolicy;
44+
import org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyWithNodeGroup;
45+
import org.apache.hadoop.net.NetworkTopologyWithNodeGroup;
4346
import org.junit.AfterClass;
4447

4548
import static org.apache.hadoop.hdfs.server.datanode.SimulatedFSDataset.CONFIG_PROPERTY_NONDFSUSED;
@@ -1645,6 +1648,22 @@ public void testBalancerCliWithIncludeListWithPortsInAFile() throws Exception {
16451648
CAPACITY, RACK2, new PortNumberBasedNodes(3, 0, 1), true, true);
16461649
}
16471650

1651+
/**
1652+
* Test a cluster with BlockPlacementPolicyWithNodeGroup
1653+
*/
1654+
@Test(timeout=100000)
1655+
public void testBalancerCliWithBlockPlacementPolicyWithNodeGroup() throws Exception {
1656+
Configuration conf = new HdfsConfiguration();
1657+
initConf(conf);
1658+
conf.setBoolean(DFSConfigKeys.DFS_USE_DFS_NETWORK_TOPOLOGY_KEY, false);
1659+
conf.set(NET_TOPOLOGY_IMPL_KEY, NetworkTopologyWithNodeGroup.class.getName());
1660+
conf.set(DFSConfigKeys.DFS_BLOCK_REPLICATOR_CLASSNAME_KEY,
1661+
BlockPlacementPolicyWithNodeGroup.class.getName());
1662+
String rackWithNodeGroup = "/rack0/nodegroup0";
1663+
doTest(conf, new long[] {CAPACITY}, new String[] {rackWithNodeGroup}, CAPACITY / 2,
1664+
rackWithNodeGroup, true);
1665+
}
1666+
16481667
/**
16491668
* Check that the balancer exits when there is an unfinalized upgrade.
16501669
*/

0 commit comments

Comments
 (0)