From cb68e5b3bdb0079af867a9e49559827ecee03010 Mon Sep 17 00:00:00 2001 From: Anu Engineer Date: Fri, 17 Jun 2016 23:25:26 -0700 Subject: [PATCH] HDFS-10540. Diskbalancer: The CLI error message for disk balancer is not enabled is not clear. Contributed by Anu Engineer. --- .../hdfs/server/datanode/DiskBalancer.java | 2 + .../server/diskbalancer/command/Command.java | 2 +- .../hadoop/hdfs/tools/DiskBalancer.java | 62 ++++++++----------- 3 files changed, 28 insertions(+), 38 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DiskBalancer.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DiskBalancer.java index 5fde7c52c4d..b31b9973fb3 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DiskBalancer.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DiskBalancer.java @@ -256,6 +256,8 @@ public String getVolumeNames() throws DiskBalancerException { } ObjectMapper mapper = new ObjectMapper(); return mapper.writeValueAsString(pathMap); + } catch (DiskBalancerException ex) { + throw ex; } catch (IOException e) { throw new DiskBalancerException("Internal error, Unable to " + "create JSON string.", e, 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 d2813e78857..19f9945675e 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 @@ -171,7 +171,7 @@ protected void setOutputPath(String path) throws IOException { diskBalancerLogs = new Path(path); } if (fs.exists(diskBalancerLogs)) { - LOG.error("Another Diskbalancer instance is running ? - Target " + + LOG.debug("Another Diskbalancer instance is running ? - Target " + "Directory already exists. {}", diskBalancerLogs); throw new IOException("Another DiskBalancer files already exist at the " + "target location. " + diskBalancerLogs.toString()); diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DiskBalancer.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DiskBalancer.java index d83a49cf2e9..67703c4dc07 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DiskBalancer.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DiskBalancer.java @@ -36,9 +36,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; import java.io.PrintStream; -import java.net.URISyntaxException; /** * DiskBalancer is a tool that can be used to ensure that data is spread evenly @@ -169,7 +167,7 @@ public static void main(String[] argv) throws Exception { res = ToolRunner.run(shell, argv); } catch (Exception ex) { LOG.error(ex.toString()); - System.exit(1); + res = 1; } System.exit(res); } @@ -449,51 +447,41 @@ private CommandLine parseArgs(String[] argv, Options opts) * @param cmd - CommandLine * @param opts options of command line * @param out the output stream used for printing - * @throws IOException - * @throws URISyntaxException */ private int dispatch(CommandLine cmd, Options opts, final PrintStream out) - throws IOException, URISyntaxException { + throws Exception { Command currentCommand = null; + if (cmd.hasOption(DiskBalancer.PLAN)) { + currentCommand = new PlanCommand(getConf()); + } - try { + if (cmd.hasOption(DiskBalancer.EXECUTE)) { + currentCommand = new ExecuteCommand(getConf()); + } - if (cmd.hasOption(DiskBalancer.PLAN)) { - currentCommand = new PlanCommand(getConf()); - } + if (cmd.hasOption(DiskBalancer.QUERY)) { + currentCommand = new QueryCommand(getConf()); + } - if (cmd.hasOption(DiskBalancer.EXECUTE)) { - currentCommand = new ExecuteCommand(getConf()); - } + if (cmd.hasOption(DiskBalancer.CANCEL)) { + currentCommand = new CancelCommand(getConf()); + } - if (cmd.hasOption(DiskBalancer.QUERY)) { - currentCommand = new QueryCommand(getConf()); - } + if (cmd.hasOption(DiskBalancer.REPORT)) { + currentCommand = new ReportCommand(getConf(), out); + } - if (cmd.hasOption(DiskBalancer.CANCEL)) { - currentCommand = new CancelCommand(getConf()); - } + if (cmd.hasOption(DiskBalancer.HELP)) { + currentCommand = new HelpCommand(getConf()); + } - if (cmd.hasOption(DiskBalancer.REPORT)) { - currentCommand = new ReportCommand(getConf(), out); - } - - if (cmd.hasOption(DiskBalancer.HELP)) { - currentCommand = new HelpCommand(getConf()); - } - - // Invoke Main help here. - if (currentCommand == null) { - new HelpCommand(getConf()).execute(null); - return 1; - } - - currentCommand.execute(cmd); - } catch (Exception ex) { - System.err.printf(ex.getMessage()); + // Invoke main help here. + if (currentCommand == null) { + new HelpCommand(getConf()).execute(null); return 1; } + + currentCommand.execute(cmd); return 0; } - }