瀏覽代碼

HDFS-13893. DiskBalancer: no validations for Disk balancer commands. Contributed by Lokesh Jain.

Signed-off-by: Wei-Chiu Chuang <weichiu@apache.org>
Lokesh Jain 5 年之前
父節點
當前提交
272b96d243

+ 8 - 0
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DiskBalancerCLI.java

@@ -21,6 +21,7 @@ import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
+import org.apache.hadoop.HadoopIllegalArgumentException;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.conf.Configured;
 import org.apache.hadoop.hdfs.HdfsConfiguration;
@@ -37,6 +38,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.PrintStream;
+import java.util.Arrays;
 
 /**
  * DiskBalancer is a tool that can be used to ensure that data is spread evenly
@@ -191,6 +193,12 @@ public class DiskBalancerCLI extends Configured implements Tool {
   public int run(String[] args) throws Exception {
     Options opts = getOpts();
     CommandLine cmd = parseArgs(args, opts);
+    String[] cmdArgs = cmd.getArgs();
+    if (cmdArgs.length > 2) {
+      throw new HadoopIllegalArgumentException(
+          "Invalid or extra Arguments: " + Arrays
+              .toString(Arrays.copyOfRange(cmdArgs, 2, cmdArgs.length)));
+    }
     return dispatch(cmd, opts);
   }
 

+ 11 - 0
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/diskbalancer/command/TestDiskBalancerCommand.java

@@ -44,6 +44,7 @@ import java.util.List;
 import java.util.Scanner;
 
 import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.HadoopIllegalArgumentException;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
@@ -384,6 +385,16 @@ public class TestDiskBalancerCommand {
     return planFileFullName;
   }
 
+  /* test exception on invalid arguments */
+  @Test(timeout = 60000)
+  public void testExceptionOnInvalidArguments() throws Exception {
+    final String cmdLine = "hdfs diskbalancer random1 -report random2 random3";
+    thrown.expect(HadoopIllegalArgumentException.class);
+    thrown.expectMessage(
+        "Invalid or extra Arguments: [random1, random2, random3]");
+    runCommand(cmdLine);
+  }
+
   /* test basic report */
   @Test(timeout = 60000)
   public void testReportSimple() throws Exception {