HBASE-17111 Use Apache CLI in SnapshotInfo tool.

Change-Id: Ifd4b0200ba58737c5583dfbcf23f2549c4f233d0
This commit is contained in:
Apekshit Sharma 2016-11-16 12:46:55 +01:00
parent b3d8d06703
commit 37b30d93d8
2 changed files with 63 additions and 82 deletions

View File

@ -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() {

View File

@ -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;
@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;
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;
// 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
}
@Override
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);
}
}