You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2016/12/02 01:53:45 UTC

hbase git commit: HBASE-17111 Use Apache CLI in SnapshotInfo tool.

Repository: hbase
Updated Branches:
  refs/heads/master b3d8d0670 -> 37b30d93d


HBASE-17111 Use Apache CLI in SnapshotInfo tool.

Change-Id: Ifd4b0200ba58737c5583dfbcf23f2549c4f233d0


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/37b30d93
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/37b30d93
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/37b30d93

Branch: refs/heads/master
Commit: 37b30d93d8b73a0c7392890e1e2498a298c2be86
Parents: b3d8d06
Author: Apekshit Sharma <ap...@apache.org>
Authored: Wed Nov 16 12:46:55 2016 +0100
Committer: Apekshit Sharma <ap...@apache.org>
Committed: Thu Dec 1 17:53:01 2016 -0800

----------------------------------------------------------------------
 .../hadoop/hbase/snapshot/ExportSnapshot.java   |   1 -
 .../hadoop/hbase/snapshot/SnapshotInfo.java     | 144 ++++++++-----------
 2 files changed, 63 insertions(+), 82 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/37b30d93/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java
index 6c7283a..e8ca73e 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java
@@ -1087,7 +1087,6 @@ public class ExportSnapshot extends AbstractHBaseTool implements Tool {
         + "  hbase snapshot export \\\n"
         + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"
         + "    --copy-to hdfs://srv1:50070/hbase");
-    System.exit(1);
   }
 
   @Override protected void addOptions() {

http://git-wip-us.apache.org/repos/asf/hbase/blob/37b30d93/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotInfo.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotInfo.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotInfo.java
index cd20274..3922348 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotInfo.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotInfo.java
@@ -32,6 +32,8 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Option;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -41,15 +43,12 @@ import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.hbase.classification.InterfaceStability;
 import org.apache.hadoop.hbase.client.SnapshotDescription;
-import org.apache.hadoop.conf.Configured;
 import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.TableName;
+import org.apache.hadoop.hbase.util.AbstractHBaseTool;
 import org.apache.hadoop.util.StringUtils;
-import org.apache.hadoop.util.Tool;
-import org.apache.hadoop.util.ToolRunner;
 
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.io.HFileLink;
 import org.apache.hadoop.hbase.io.WALLink;
 import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
@@ -68,9 +67,23 @@ import org.apache.hadoop.hbase.util.FSUtils;
  */
 @InterfaceAudience.Public
 @InterfaceStability.Evolving
-public final class SnapshotInfo extends Configured implements Tool {
+public final class SnapshotInfo extends AbstractHBaseTool {
   private static final Log LOG = LogFactory.getLog(SnapshotInfo.class);
 
+  static final class Options {
+    static final Option SNAPSHOT = new Option(null, "snapshot", true, "Snapshot to examine.");
+    static final Option REMOTE_DIR = new Option(null, "remote-dir", true,
+        "Root directory that contains the snapshots.");
+    static final Option LIST_SNAPSHOTS = new Option(null, "list-snapshots", false,
+        "List all the available snapshots and exit.");
+    static final Option FILES = new Option(null, "files", false, "Files and logs list.");
+    static final Option STATS = new Option(null, "stats", false, "Files and logs stats.");
+    static final Option SCHEMA = new Option(null, "schema", false,
+        "Describe the snapshotted table.");
+    static final Option SIZE_IN_BYTES = new Option(null, "size-in-bytes", false,
+        "Print the size of the files in bytes.");
+  }
+
   /**
    * Statistics about the snapshot
    * <ol>
@@ -339,54 +352,25 @@ public final class SnapshotInfo extends Configured implements Tool {
     }
   }
 
-  private boolean printSizeInBytes = false;
   private FileSystem fs;
   private Path rootDir;
 
   private SnapshotManifest snapshotManifest;
 
+  private boolean listSnapshots = false;
+  private String snapshotName;
+  private Path remoteDir;
+  private boolean showSchema = false;
+  private boolean showFiles = false;
+  private boolean showStats = false;
+  private boolean printSizeInBytes = false;
+
   @Override
-  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="REC_CATCH_EXCEPTION",
-    justification="Intentional")
-  public int run(String[] args) throws IOException, InterruptedException {
-    final Configuration conf = getConf();
-    boolean listSnapshots = false;
-    String snapshotName = null;
-    boolean showSchema = false;
-    boolean showFiles = false;
-    boolean showStats = false;
-
-    // Process command line args
-    for (int i = 0; i < args.length; i++) {
-      String cmd = args[i];
-      try {
-        if (cmd.equals("-snapshot")) {
-          snapshotName = args[++i];
-        } else if (cmd.equals("-files")) {
-          showFiles = true;
-          showStats = true;
-        } else if (cmd.equals("-stats")) {
-          showStats = true;
-        } else if (cmd.equals("-schema")) {
-          showSchema = true;
-        } else if (cmd.equals("-remote-dir")) {
-          Path sourceDir = new Path(args[++i]);
-          URI defaultFs = sourceDir.getFileSystem(conf).getUri();
-          FSUtils.setFsDefault(conf, new Path(defaultFs));
-          FSUtils.setRootDir(conf, sourceDir);
-        } else if (cmd.equals("-list-snapshots")) {
-          listSnapshots = true;
-        } else if (cmd.equals("-size-in-bytes")) {
-          printSizeInBytes = true;
-        } else if (cmd.equals("-h") || cmd.equals("--help")) {
-          printUsageAndExit();
-        } else {
-          System.err.println("UNEXPECTED: " + cmd);
-          printUsageAndExit();
-        }
-      } catch (Exception e) {
-        printUsageAndExit(); // FindBugs: REC_CATCH_EXCEPTION
-      }
+  public int doWork() throws IOException, InterruptedException {
+    if (remoteDir != null) {
+      URI defaultFs = remoteDir.getFileSystem(conf).getUri();
+      FSUtils.setFsDefault(conf, new Path(defaultFs));
+      FSUtils.setRootDir(conf, remoteDir);
     }
 
     // List Available Snapshots
@@ -402,12 +386,6 @@ public final class SnapshotInfo extends Configured implements Tool {
       return 0;
     }
 
-    if (snapshotName == null) {
-      System.err.println("Missing snapshot name!");
-      printUsageAndExit();
-      return 1;
-    }
-
     rootDir = FSUtils.getRootDir(conf);
     fs = FileSystem.get(rootDir.toUri(), conf);
     LOG.debug("fs=" + fs.getUri().toString() + " root=" + rootDir);
@@ -461,7 +439,7 @@ public final class SnapshotInfo extends Configured implements Tool {
   }
 
   /**
-   * Dump the {@link HTableDescriptor}
+   * Dump the {@link org.apache.hadoop.hbase.HTableDescriptor}
    */
   private void printSchema() {
     System.out.println("Table Descriptor");
@@ -536,22 +514,36 @@ public final class SnapshotInfo extends Configured implements Tool {
     return printSizeInBytes ? Long.toString(size) : StringUtils.humanReadableInt(size);
   }
 
-  private void printUsageAndExit() {
-    System.err.printf("Usage: bin/hbase snapshot info [options]%n");
-    System.err.println(" where [options] are:");
-    System.err.println("  -h|-help                Show this help and exit.");
-    System.err.println("  -remote-dir             Root directory that contains the snapshots.");
-    System.err.println("  -list-snapshots         List all the available snapshots and exit.");
-    System.err.println("  -size-in-bytes          Print the size of the files in bytes.");
-    System.err.println("  -snapshot NAME          Snapshot to examine.");
-    System.err.println("  -files                  Files and logs list.");
-    System.err.println("  -stats                  Files and logs stats.");
-    System.err.println("  -schema                 Describe the snapshotted table.");
-    System.err.println();
+  @Override
+  protected void addOptions() {
+    addRequiredOption(Options.SNAPSHOT);
+    addOption(Options.REMOTE_DIR);
+    addOption(Options.LIST_SNAPSHOTS);
+    addOption(Options.FILES);
+    addOption(Options.STATS);
+    addOption(Options.SCHEMA);
+    addOption(Options.SIZE_IN_BYTES);
+  }
+
+  @Override
+  protected void processOptions(CommandLine cmd) {
+    snapshotName = cmd.getOptionValue(Options.SNAPSHOT.getLongOpt());
+    showFiles = cmd.hasOption(Options.FILES.getLongOpt());
+    showStats = cmd.hasOption(Options.FILES.getLongOpt())
+        || cmd.hasOption(Options.STATS.getLongOpt());
+    showSchema = cmd.hasOption(Options.SCHEMA.getLongOpt());
+    listSnapshots = cmd.hasOption(Options.LIST_SNAPSHOTS.getLongOpt());
+    printSizeInBytes = cmd.hasOption(Options.SIZE_IN_BYTES.getLongOpt());
+    if (cmd.hasOption(Options.REMOTE_DIR.getLongOpt())) {
+      remoteDir = new Path(cmd.getOptionValue(Options.REMOTE_DIR.getLongOpt()));
+    }
+  }
+
+  @Override
+  protected void printUsage() {
+    printUsage("bin/hbase snapshot info [options]", "Options:", "");
     System.err.println("Examples:");
-    System.err.println("  hbase snapshot info \\");
-    System.err.println("    -snapshot MySnapshot -files");
-    System.exit(1);
+    System.err.println("  hbase snapshot info --snapshot MySnapshot --files");
   }
 
   /**
@@ -714,18 +706,8 @@ public final class SnapshotInfo extends Configured implements Tool {
     return fileMap;
   }
 
-  /**
-   * The guts of the {@link #main} method.
-   * Call this method to avoid the {@link #main(String[])} System.exit.
-   * @param args
-   * @return errCode
-   * @throws Exception
-   */
-  static int innerMain(final String [] args) throws Exception {
-    return ToolRunner.run(HBaseConfiguration.create(), new SnapshotInfo(), args);
-  }
 
-  public static void main(String[] args) throws Exception {
-     System.exit(innerMain(args));
+  public static void main(String[] args) {
+    new SnapshotInfo().doStaticMain(args);
   }
 }