浏览代码

HDFS-7223. Tracing span description of IPC client is too long (iwasakims via cmccabe)

Colin Patrick Mccabe 10 年之前
父节点
当前提交
5b56ac4c72

+ 1 - 3
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ProtobufRpcEngine.java

@@ -212,9 +212,7 @@ public class ProtobufRpcEngine implements RpcEngine {
       // guard it in the if statement to make sure there isn't
       // any extra string manipulation.
       if (Trace.isTracing()) {
-        traceScope = Trace.startSpan(
-            method.getDeclaringClass().getCanonicalName() +
-            "." + method.getName());
+        traceScope = Trace.startSpan(RpcClientUtil.methodToTraceString(method));
       }
 
       RequestHeaderProto rpcRequestHeader = constructRpcRequestHeader(method);

+ 21 - 0
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RpcClientUtil.java

@@ -189,4 +189,25 @@ public class RpcClientUtil {
         .getProtocolMetaInfoProxy(inv.getConnectionId(), conf,
             NetUtils.getDefaultSocketFactory(conf)).getProxy();
   }
+
+  /**
+   * Convert an RPC method to a string.
+   * The format we want is 'MethodOuterClassShortName#methodName'.
+   *
+   * For example, if the method is:
+   *   org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.
+   *     ClientNamenodeProtocol.BlockingInterface.getServerDefaults
+   *
+   * the format we want is:
+   *   ClientNamenodeProtocol#getServerDefaults
+   */
+  public static String methodToTraceString(Method method) {
+    Class<?> clazz = method.getDeclaringClass();
+    while (true) {
+      Class<?> next = clazz.getEnclosingClass();
+      if (next == null || next.getEnclosingClass() == null) break;
+      clazz = next;
+    }
+    return clazz.getSimpleName() + "#" + method.getName();
+  }
 }

+ 1 - 3
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/WritableRpcEngine.java

@@ -235,9 +235,7 @@ public class WritableRpcEngine implements RpcEngine {
       }
       TraceScope traceScope = null;
       if (Trace.isTracing()) {
-        traceScope = Trace.startSpan(
-            method.getDeclaringClass().getCanonicalName() +
-            "." + method.getName());
+        traceScope = Trace.startSpan(RpcClientUtil.methodToTraceString(method));
       }
       ObjectWritable value;
       try {

+ 3 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt

@@ -300,6 +300,9 @@ Release 2.7.0 - UNRELEASED
     HDFS-7257. Add the time of last HA state transition to NN's /jmx page.
     (Charles Lamb via wheat9)
 
+    HDFS-7223. Tracing span description of IPC client is too long (iwasakims
+    via cmccabe)
+
   OPTIMIZATIONS
 
   BUG FIXES

+ 5 - 5
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/tracing/TestTracing.java

@@ -83,15 +83,15 @@ public class TestTracing {
     String[] expectedSpanNames = {
       "testWriteTraceHooks",
       "org.apache.hadoop.hdfs.protocol.ClientProtocol.create",
-      "org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ClientNamenodeProtocol.BlockingInterface.create",
+      "ClientNamenodeProtocol#create",
       "org.apache.hadoop.hdfs.protocol.ClientProtocol.fsync",
-      "org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ClientNamenodeProtocol.BlockingInterface.fsync",
+      "ClientNamenodeProtocol#fsync",
       "org.apache.hadoop.hdfs.protocol.ClientProtocol.complete",
-      "org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ClientNamenodeProtocol.BlockingInterface.complete",
+      "ClientNamenodeProtocol#complete",
       "DFSOutputStream",
       "OpWriteBlockProto",
       "org.apache.hadoop.hdfs.protocol.ClientProtocol.addBlock",
-      "org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ClientNamenodeProtocol.BlockingInterface.addBlock"
+      "ClientNamenodeProtocol#addBlock"
     };
     assertSpanNamesFound(expectedSpanNames);
 
@@ -162,7 +162,7 @@ public class TestTracing {
     String[] expectedSpanNames = {
       "testReadTraceHooks",
       "org.apache.hadoop.hdfs.protocol.ClientProtocol.getBlockLocations",
-      "org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ClientNamenodeProtocol.BlockingInterface.getBlockLocations",
+      "ClientNamenodeProtocol#getBlockLocations",
       "OpReadBlockProto"
     };
     assertSpanNamesFound(expectedSpanNames);