HDFS-12948. DiskBalancer report command top option should only take positive numeric values. Contributed by Shashikant Banerjee.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/2a48b359 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/2a48b359 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/2a48b359 Branch: refs/heads/YARN-6592 Commit: 2a48b3594c502c4dcf201f2b60386383c0d9ae91 Parents: 7a55044 Author: Yiqun Lin <[email protected]> Authored: Thu Jan 4 10:48:44 2018 +0800 Committer: Yiqun Lin <[email protected]> Committed: Thu Jan 4 10:48:44 2018 +0800 ---------------------------------------------------------------------- .../hadoop/hdfs/server/diskbalancer/command/Command.java | 7 ++++++- .../hdfs/server/diskbalancer/command/ReportCommand.java | 2 +- .../diskbalancer/command/TestDiskBalancerCommand.java | 9 +++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/2a48b359/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/diskbalancer/command/Command.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/diskbalancer/command/Command.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/diskbalancer/command/Command.java index eeb7241..8eacdec 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/diskbalancer/command/Command.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/diskbalancer/command/Command.java @@ -501,7 +501,8 @@ public abstract class Command extends Configured implements Closeable { * Parse top number of nodes to be processed. * @return top number of nodes to be processed. */ - protected int parseTopNodes(final CommandLine cmd, final StrBuilder result) { + protected int parseTopNodes(final CommandLine cmd, final StrBuilder result) + throws IllegalArgumentException { String outputLine = ""; int nodes = 0; final String topVal = cmd.getOptionValue(DiskBalancerCLI.TOP); @@ -523,6 +524,10 @@ public abstract class Command extends Configured implements Closeable { result.appendln(outputLine); nodes = getDefaultTop(); } + if (nodes <= 0) { + throw new IllegalArgumentException( + "Top limit input should be a positive numeric value"); + } } return Math.min(nodes, cluster.getNodes().size()); http://git-wip-us.apache.org/repos/asf/hadoop/blob/2a48b359/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/diskbalancer/command/ReportCommand.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/diskbalancer/command/ReportCommand.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/diskbalancer/command/ReportCommand.java index b224b11..58ef5ce 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/diskbalancer/command/ReportCommand.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/diskbalancer/command/ReportCommand.java @@ -100,7 +100,7 @@ public class ReportCommand extends Command { } private void handleTopReport(final CommandLine cmd, final StrBuilder result, - final String nodeFormat) { + final String nodeFormat) throws IllegalArgumentException { Collections.sort(getCluster().getNodes(), Collections.reverseOrder()); /* extract value that identifies top X DataNode(s) */ http://git-wip-us.apache.org/repos/asf/hadoop/blob/2a48b359/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/diskbalancer/command/TestDiskBalancerCommand.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/diskbalancer/command/TestDiskBalancerCommand.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/diskbalancer/command/TestDiskBalancerCommand.java index 1cebae0..6fde209 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/diskbalancer/command/TestDiskBalancerCommand.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/diskbalancer/command/TestDiskBalancerCommand.java @@ -244,6 +244,15 @@ public class TestDiskBalancerCommand { } + /* test basic report with negative top limit */ + @Test(timeout = 60000) + public void testReportWithNegativeTopLimit() + throws Exception { + final String cmdLine = "hdfs diskbalancer -report -top -32"; + thrown.expect(java.lang.IllegalArgumentException.class); + thrown.expectMessage("Top limit input should be a positive numeric value"); + runCommand(cmdLine); + } /* test less than 64 DataNode(s) as total, e.g., -report -top 32 */ @Test(timeout = 60000) public void testReportLessThanTotal() throws Exception { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
