HADOOP-12124. Add HTrace support for FsShell (cmccabe)

(cherry picked from commit ad60807238)
This commit is contained in:
Colin Patrick Mccabe 2015-06-30 16:46:25 -07:00
parent 7c698bc350
commit 016c794e75
2 changed files with 16 additions and 2 deletions

View File

@ -168,6 +168,8 @@ Release 2.8.0 - UNRELEASED
TestCryptoStreamsWithOpensslAesCtrCryptoCodec when OpenSSL is not
installed. (wang)
HADOOP-12124. Add HTrace support for FsShell (cmccabe)
OPTIMIZATIONS
HADOOP-11785. Reduce the number of listStatus operation in distcp

View File

@ -33,8 +33,13 @@ import org.apache.hadoop.fs.shell.Command;
import org.apache.hadoop.fs.shell.CommandFactory;
import org.apache.hadoop.fs.shell.FsCommand;
import org.apache.hadoop.tools.TableListing;
import org.apache.hadoop.tracing.TraceUtils;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
import org.apache.htrace.Sampler;
import org.apache.htrace.SamplerBuilder;
import org.apache.htrace.Trace;
import org.apache.htrace.TraceScope;
/** Provide command line access to a FileSystem. */
@InterfaceAudience.Private
@ -47,6 +52,7 @@ public class FsShell extends Configured implements Tool {
private FileSystem fs;
private Trash trash;
protected CommandFactory commandFactory;
private Sampler traceSampler;
private final String usagePrefix =
"Usage: hadoop fs [generic options]";
@ -272,7 +278,8 @@ public class FsShell extends Configured implements Tool {
public int run(String argv[]) throws Exception {
// initialize FsShell
init();
traceSampler = new SamplerBuilder(TraceUtils.
wrapHadoopConf("dfs.shell.htrace.", getConf())).build();
int exitCode = -1;
if (argv.length < 1) {
printUsage(System.err);
@ -284,7 +291,12 @@ public class FsShell extends Configured implements Tool {
if (instance == null) {
throw new UnknownCommandException();
}
exitCode = instance.run(Arrays.copyOfRange(argv, 1, argv.length));
TraceScope scope = Trace.startSpan(instance.getCommandName(), traceSampler);
try {
exitCode = instance.run(Arrays.copyOfRange(argv, 1, argv.length));
} finally {
scope.close();
}
} catch (IllegalArgumentException e) {
displayError(cmd, e.getLocalizedMessage());
if (instance != null) {