HBASE-26971 SnapshotInfo --snapshot param is marked as required even when trying to list all snapshots (#4366)
Signed-off-by: Josh Elser <elserj@apache.org>
(cherry picked from commit af13c6d4c6
)
This commit is contained in:
parent
0f9f6f2cde
commit
c9d833ed5e
|
@ -27,6 +27,7 @@ import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
@ -43,6 +44,12 @@ import org.apache.hadoop.hbase.io.WALLink;
|
||||||
import org.apache.hadoop.hbase.util.AbstractHBaseTool;
|
import org.apache.hadoop.hbase.util.AbstractHBaseTool;
|
||||||
import org.apache.hadoop.hbase.util.CommonFSUtils;
|
import org.apache.hadoop.hbase.util.CommonFSUtils;
|
||||||
import org.apache.hadoop.util.StringUtils;
|
import org.apache.hadoop.util.StringUtils;
|
||||||
|
import org.apache.hbase.thirdparty.org.apache.commons.cli.AlreadySelectedException;
|
||||||
|
import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLineParser;
|
||||||
|
import org.apache.hbase.thirdparty.org.apache.commons.cli.DefaultParser;
|
||||||
|
import org.apache.hbase.thirdparty.org.apache.commons.cli.MissingOptionException;
|
||||||
|
import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;
|
||||||
|
import org.apache.hbase.thirdparty.org.apache.commons.cli.ParseException;
|
||||||
import org.apache.yetus.audience.InterfaceAudience;
|
import org.apache.yetus.audience.InterfaceAudience;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -68,17 +75,25 @@ public final class SnapshotInfo extends AbstractHBaseTool {
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(SnapshotInfo.class);
|
private static final Logger LOG = LoggerFactory.getLogger(SnapshotInfo.class);
|
||||||
|
|
||||||
static final class Options {
|
static final class Options {
|
||||||
static final Option SNAPSHOT = new Option(null, "snapshot", true, "Snapshot to examine.");
|
static final Option SNAPSHOT = new Option(null, "snapshot", true,
|
||||||
|
"The name of the snapshot to be detailed.");
|
||||||
static final Option REMOTE_DIR = new Option(null, "remote-dir", true,
|
static final Option REMOTE_DIR = new Option(null, "remote-dir", true,
|
||||||
"Root directory that contains the snapshots.");
|
"A custom root directory where snapshots are stored. "
|
||||||
|
+ "Use it together with the --snapshot option.");
|
||||||
static final Option LIST_SNAPSHOTS = new Option(null, "list-snapshots", false,
|
static final Option LIST_SNAPSHOTS = new Option(null, "list-snapshots", false,
|
||||||
"List all the available snapshots and exit.");
|
"List all the available snapshots and exit.");
|
||||||
static final Option FILES = new Option(null, "files", false, "Files and logs list.");
|
static final Option FILES = new Option(null, "files", false,
|
||||||
static final Option STATS = new Option(null, "stats", false, "Files and logs stats.");
|
"The list of files retained by the specified snapshot. "
|
||||||
|
+ "Use it together with the --snapshot option.");
|
||||||
|
static final Option STATS = new Option(null, "stats", false,
|
||||||
|
"Additional information about the specified snapshot. "
|
||||||
|
+ "Use it together with the --snapshot option.");
|
||||||
static final Option SCHEMA = new Option(null, "schema", false,
|
static final Option SCHEMA = new Option(null, "schema", false,
|
||||||
"Describe the snapshotted table.");
|
"Show the descriptor of the table for the specified snapshot. "
|
||||||
|
+ "Use it together with the --snapshot option.");
|
||||||
static final Option SIZE_IN_BYTES = new Option(null, "size-in-bytes", false,
|
static final Option SIZE_IN_BYTES = new Option(null, "size-in-bytes", false,
|
||||||
"Print the size of the files in bytes.");
|
"Print the size of the files in bytes. "
|
||||||
|
+ "Use it together with the --snapshot and --files options.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -396,7 +411,9 @@ public final class SnapshotInfo extends AbstractHBaseTool {
|
||||||
}
|
}
|
||||||
|
|
||||||
printInfo();
|
printInfo();
|
||||||
if (showSchema) printSchema();
|
if (showSchema) {
|
||||||
|
printSchema();
|
||||||
|
}
|
||||||
printFiles(showFiles, showStats);
|
printFiles(showFiles, showStats);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -516,7 +533,7 @@ public final class SnapshotInfo extends AbstractHBaseTool {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void addOptions() {
|
protected void addOptions() {
|
||||||
addRequiredOption(Options.SNAPSHOT);
|
addOption(Options.SNAPSHOT);
|
||||||
addOption(Options.REMOTE_DIR);
|
addOption(Options.REMOTE_DIR);
|
||||||
addOption(Options.LIST_SNAPSHOTS);
|
addOption(Options.LIST_SNAPSHOTS);
|
||||||
addOption(Options.FILES);
|
addOption(Options.FILES);
|
||||||
|
@ -525,6 +542,24 @@ public final class SnapshotInfo extends AbstractHBaseTool {
|
||||||
addOption(Options.SIZE_IN_BYTES);
|
addOption(Options.SIZE_IN_BYTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected CommandLineParser newParser() {
|
||||||
|
// Commons-CLI lacks the capability to handle combinations of options, so we do it ourselves
|
||||||
|
// Validate in parse() to get helpful error messages instead of exploding in processOptions()
|
||||||
|
return new DefaultParser() {
|
||||||
|
@Override
|
||||||
|
public CommandLine parse(org.apache.hbase.thirdparty.org.apache.commons.cli.Options opts, String[] args, Properties props, boolean stop)
|
||||||
|
throws ParseException {
|
||||||
|
CommandLine cl = super.parse(opts, args, props, stop);
|
||||||
|
if(!cmd.hasOption(Options.LIST_SNAPSHOTS) && !cmd.hasOption(Options.SNAPSHOT)) {
|
||||||
|
throw new ParseException("Missing required snapshot option!");
|
||||||
|
}
|
||||||
|
return cl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void processOptions(CommandLine cmd) {
|
protected void processOptions(CommandLine cmd) {
|
||||||
snapshotName = cmd.getOptionValue(Options.SNAPSHOT.getLongOpt());
|
snapshotName = cmd.getOptionValue(Options.SNAPSHOT.getLongOpt());
|
||||||
|
|
Loading…
Reference in New Issue