ctrezzo commented on code in PR #7127:
URL: https://github.com/apache/hadoop/pull/7127#discussion_r1828252723
##########
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/balancer/TestBalancer.java:
##########
@@ -1932,6 +2083,114 @@ void testBalancerRPCDelay(int getBlocksMaxQps) throws
Exception {
getBlocksMaxQps, getBlockCallsPerSecond <= getBlocksMaxQps);
}
+ /**
+ * Test balancer with excluded target nodes.
+ */
+ @Test(timeout=100000)
+ public void testBalancerExcludeTargetNodes() throws Exception {
+ final Configuration conf = new HdfsConfiguration();
+ initConf(conf);
+ Set<String> excludeTargetNodes = new HashSet<>();
+ excludeTargetNodes.add("datanodeZ");
+ BalancerParameters.Builder pBuilder = new BalancerParameters.Builder();
+ pBuilder.setExcludedTargetNodes(excludeTargetNodes);
+ BalancerParameters p = pBuilder.build();
+ try {
+ doTest(conf, CAPACITY, RACK2,
+ new HostNameBasedNodes(new String[]{"datanodeX", "datanodeY",
"datanodeZ"},
+ BalancerParameters.DEFAULT.getExcludedNodes(),
+ BalancerParameters.DEFAULT.getIncludedNodes()), false,
+ false, p);
+ } catch (Exception e) {
+ if
(!e.getMessage().contains(String.valueOf(ExitStatus.NO_MOVE_BLOCK.getExitCode())))
{
+ throw e;
+ }
+ }
+ }
+
+ /**
+ * Test balancer with included target nodes.
+ */
+ @Test(timeout=100000)
+ public void testBalancerIncludeTargetNodes() throws Exception {
+ final Configuration conf = new HdfsConfiguration();
+ initConf(conf);
+ Set<String> includeTargetNodes = new HashSet<>();
+ includeTargetNodes.add("datanodeY");
+ includeTargetNodes.add("datanodeZ");
+ BalancerParameters.Builder pBuilder = new BalancerParameters.Builder();
+ pBuilder.setTargetNodes(includeTargetNodes);
+ BalancerParameters p = pBuilder.build();
+ try {
+ doTest(conf, CAPACITY, RACK2,
+ new HostNameBasedNodes(new String[]{"datanodeX", "datanodeY",
"datanodeZ"},
+ BalancerParameters.DEFAULT.getExcludedNodes(),
+ BalancerParameters.DEFAULT.getIncludedNodes()), false,
+ false, p);
+ } catch (Exception e) {
+ if
(!e.getMessage().contains(String.valueOf(ExitStatus.NO_MOVE_BLOCK.getExitCode())))
{
+ throw e;
+ }
+ }
+ }
+
+ /**
+ * Test balancer with included source nodes.
+ * Since newly added nodes are the only included source nodes no balancing
will occur.
+ */
+ @Test(timeout=100000)
+ public void testBalancerIncludeSourceNodes() throws Exception {
+ final Configuration conf = new HdfsConfiguration();
+ initConf(conf);
+ Set<String> includeSourceNodes = new HashSet<>();
+ includeSourceNodes.add("datanodeX");
+ includeSourceNodes.add("datanodeY");
+ includeSourceNodes.add("datanodeZ");
+ BalancerParameters.Builder pBuilder = new BalancerParameters.Builder();
+ pBuilder.setSourceNodes(includeSourceNodes);
+ BalancerParameters p = pBuilder.build();
+ try {
+ doTest(conf, CAPACITY, RACK2,
+ new HostNameBasedNodes(new String[]{"datanodeX", "datanodeY",
"datanodeZ"},
+ BalancerParameters.DEFAULT.getExcludedNodes(),
+ BalancerParameters.DEFAULT.getIncludedNodes()), false,
+ false, p);
+ } catch (Exception e) {
+ if
(!e.getMessage().contains(String.valueOf(ExitStatus.NO_MOVE_BLOCK.getExitCode())))
{
+ throw e;
+ }
+ }
+ }
+
+ /**
+ * Test balancer with excluded source nodes.
+ * Since newly added nodes will not be selected as a source,
+ * all nodes will be included in balancing.
+ */
+ @Test(timeout=100000)
+ public void testBalancerExcludeSourceNodes() throws Exception {
+ final Configuration conf = new HdfsConfiguration();
+ initConf(conf);
+ Set<String> excludeSourceNodes = new HashSet<>();
+ excludeSourceNodes.add("datanodeX");
+ excludeSourceNodes.add("datanodeY");
+ BalancerParameters.Builder pBuilder = new BalancerParameters.Builder();
+ pBuilder.setExcludedSourceNodes(excludeSourceNodes);
+ BalancerParameters p = pBuilder.build();
+ try {
+ doTest(conf, CAPACITY, RACK2,
+ new HostNameBasedNodes(new String[]{"datanodeX", "datanodeY",
"datanodeZ"},
+ BalancerParameters.DEFAULT.getExcludedNodes(),
+ BalancerParameters.DEFAULT.getIncludedNodes()), false,
+ false, p);
+ } catch (Exception e) {
+ if
(!e.getMessage().contains(String.valueOf(ExitStatus.NO_MOVE_BLOCK.getExitCode())))
{
Review Comment:
@Jtdellaringa
Right now the unit tests pass in the cases where:
1. no exception is thrown
2. an exception with NO_MOVE_BLOCK exit code in the message
Are the above two cases intended behavior?
If #2 is the only expected pass case, then we should either annotate the
test with the expected failure or use the junit assertThrows (I forget which
version this assert is available in).
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]