Browse Source

HADOOP-12183. Annotate the HTrace span created by FsShell with the command-line arguments passed by the user (Masatake Iwasaki via Colin P. McCabe)

(cherry picked from commit 454da959c726528ac98dbca1b935a83ed4b9e235)
Colin Patrick Mccabe 9 years ago
parent
commit
7d68f17731

+ 4 - 0
hadoop-common-project/hadoop-common/CHANGES.txt

@@ -228,6 +228,10 @@ Release 2.8.0 - UNRELEASED
 
     HADOOP-11807. add a lint mode to releasedocmaker (ramtin via aw)
 
+    HADOOP-12183. Annotate the HTrace span created by FsShell with the
+    command-line arguments passed by the user (Masatake Iwasaki via Colin P.
+    McCabe)
+
   OPTIMIZATIONS
 
     HADOOP-11785. Reduce the number of listStatus operation in distcp

+ 8 - 0
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FsShell.java

@@ -35,6 +35,7 @@ import org.apache.hadoop.fs.shell.FsCommand;
 import org.apache.hadoop.tracing.SpanReceiverHost;
 import org.apache.hadoop.tools.TableListing;
 import org.apache.hadoop.tracing.TraceUtils;
+import org.apache.hadoop.util.StringUtils;
 import org.apache.hadoop.util.Tool;
 import org.apache.hadoop.util.ToolRunner;
 import org.apache.htrace.Sampler;
@@ -298,6 +299,13 @@ public class FsShell extends Configured implements Tool {
           throw new UnknownCommandException();
         }
         TraceScope scope = Trace.startSpan(instance.getCommandName(), traceSampler);
+        if (scope.getSpan() != null) {
+          String args = StringUtils.join(" ", argv);
+          if (args.length() > 2048) {
+            args = args.substring(0, 2048);
+          }
+          scope.getSpan().addKVAnnotation("args", args);
+        }
         try {
           exitCode = instance.run(Arrays.copyOfRange(argv, 1, argv.length));
         } finally {

+ 5 - 1
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFsShell.java

@@ -24,6 +24,7 @@ import org.apache.hadoop.tracing.SpanReceiverHost;
 import org.apache.hadoop.util.ToolRunner;
 import org.apache.htrace.SamplerBuilder;
 import org.apache.htrace.impl.AlwaysSampler;
+import org.junit.Assert;
 import org.junit.Test;
 
 public class TestFsShell {
@@ -57,10 +58,13 @@ public class TestFsShell {
     FsShell shell = new FsShell(conf);
     int res;
     try {
-      res = ToolRunner.run(shell, new String[]{"-help"});
+      res = ToolRunner.run(shell, new String[]{"-help", "ls", "cat"});
     } finally {
       shell.close();
     }
     SetSpanReceiver.assertSpanNamesFound(new String[]{"help"});
+    Assert.assertEquals("-help ls cat",
+        SetSpanReceiver.getMap()
+            .get("help").get(0).getKVAnnotations().get("args"));
   }
 }