[49/50] [abbrv] hadoop git commit: HADOOP-15340. Provide meaningful RPC server name for RpcMetrics. Contributed by Elek Marton.
HADOOP-15340. Provide meaningful RPC server name for RpcMetrics. Contributed by Elek Marton. Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/8ab776d6 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/8ab776d6 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/8ab776d6 Branch: refs/heads/HDFS-7240 Commit: 8ab776d61e569c12ec62024415ff68e5d3b10141 Parents: e76c2ae Author: Xiaoyu YaoAuthored: Tue Apr 10 11:42:54 2018 -0700 Committer: Xiaoyu Yao Committed: Tue Apr 10 11:42:54 2018 -0700 -- .../apache/hadoop/ipc/ProtobufRpcEngine.java| 5 +- .../main/java/org/apache/hadoop/ipc/RPC.java| 46 +--- .../main/java/org/apache/hadoop/ipc/Server.java | 9 .../apache/hadoop/ipc/WritableRpcEngine.java| 2 +- .../apache/hadoop/ipc/metrics/RpcMetrics.java | 11 +++- .../java/org/apache/hadoop/ipc/TestRPC.java | 56 +++- 6 files changed, 117 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hadoop/blob/8ab776d6/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ProtobufRpcEngine.java -- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ProtobufRpcEngine.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ProtobufRpcEngine.java index 639bbad..70fde60 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ProtobufRpcEngine.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ProtobufRpcEngine.java @@ -419,8 +419,9 @@ public class ProtobufRpcEngine implements RpcEngine { String portRangeConfig) throws IOException { super(bindAddress, port, null, numHandlers, - numReaders, queueSizePerHandler, conf, classNameBase(protocolImpl - .getClass().getName()), secretManager, portRangeConfig); + numReaders, queueSizePerHandler, conf, + serverNameFromClass(protocolImpl.getClass()), secretManager, + portRangeConfig); this.verbose = verbose; registerProtocolAndImpl(RPC.RpcKind.RPC_PROTOCOL_BUFFER, protocolClass, protocolImpl); http://git-wip-us.apache.org/repos/asf/hadoop/blob/8ab776d6/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RPC.java -- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RPC.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RPC.java index 8f8eda6..9cfadc7 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RPC.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RPC.java @@ -35,6 +35,8 @@ import java.util.List; import java.util.Map; import java.util.HashMap; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.net.SocketFactory; @@ -808,13 +810,45 @@ public class RPC { /** An RPC Server. */ public abstract static class Server extends org.apache.hadoop.ipc.Server { - boolean verbose; - static String classNameBase(String className) { - String[] names = className.split("\\.", -1); - if (names == null || names.length == 0) { -return className; + +boolean verbose; + +private static final Pattern COMPLEX_SERVER_NAME_PATTERN = +Pattern.compile("(?:[^\\$]*\\$)*([A-Za-z][^\\$]+)(?:\\$\\d+)?"); + +/** + * Get a meaningful and short name for a server based on a java class. + * + * The rules are defined to support the current naming schema of the + * generated protobuf classes where the final class usually an anonymous + * inner class of an inner class. + * + * 1. For simple classes it returns with the simple name of the classes + * (with the name without package name) + * + * 2. For inner classes, this is the simple name of the inner class. + * + * 3. If it is an Object created from a class factory + * E.g., org.apache.hadoop.ipc.TestRPC$TestClass$2 + * this method returns parent class TestClass. + * + * 4. If it is an anonymous class E.g., 'org.apache.hadoop.ipc.TestRPC$10' + * serverNameFromClass returns parent class TestRPC. + * + * + */ +static String serverNameFromClass(Class clazz) { + String name = clazz.getName(); + String[] names = clazz.getName().split("\\.", -1); + if (names != null && names.length > 0) { +name = names[names.length - 1]; + } + Matcher matcher =
hadoop git commit: HADOOP-15340. Provide meaningful RPC server name for RpcMetrics. Contributed by Elek Marton.
Repository: hadoop Updated Branches: refs/heads/trunk e76c2aeb2 -> 8ab776d61 HADOOP-15340. Provide meaningful RPC server name for RpcMetrics. Contributed by Elek Marton. Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/8ab776d6 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/8ab776d6 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/8ab776d6 Branch: refs/heads/trunk Commit: 8ab776d61e569c12ec62024415ff68e5d3b10141 Parents: e76c2ae Author: Xiaoyu YaoAuthored: Tue Apr 10 11:42:54 2018 -0700 Committer: Xiaoyu Yao Committed: Tue Apr 10 11:42:54 2018 -0700 -- .../apache/hadoop/ipc/ProtobufRpcEngine.java| 5 +- .../main/java/org/apache/hadoop/ipc/RPC.java| 46 +--- .../main/java/org/apache/hadoop/ipc/Server.java | 9 .../apache/hadoop/ipc/WritableRpcEngine.java| 2 +- .../apache/hadoop/ipc/metrics/RpcMetrics.java | 11 +++- .../java/org/apache/hadoop/ipc/TestRPC.java | 56 +++- 6 files changed, 117 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hadoop/blob/8ab776d6/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ProtobufRpcEngine.java -- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ProtobufRpcEngine.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ProtobufRpcEngine.java index 639bbad..70fde60 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ProtobufRpcEngine.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ProtobufRpcEngine.java @@ -419,8 +419,9 @@ public class ProtobufRpcEngine implements RpcEngine { String portRangeConfig) throws IOException { super(bindAddress, port, null, numHandlers, - numReaders, queueSizePerHandler, conf, classNameBase(protocolImpl - .getClass().getName()), secretManager, portRangeConfig); + numReaders, queueSizePerHandler, conf, + serverNameFromClass(protocolImpl.getClass()), secretManager, + portRangeConfig); this.verbose = verbose; registerProtocolAndImpl(RPC.RpcKind.RPC_PROTOCOL_BUFFER, protocolClass, protocolImpl); http://git-wip-us.apache.org/repos/asf/hadoop/blob/8ab776d6/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RPC.java -- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RPC.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RPC.java index 8f8eda6..9cfadc7 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RPC.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RPC.java @@ -35,6 +35,8 @@ import java.util.List; import java.util.Map; import java.util.HashMap; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.net.SocketFactory; @@ -808,13 +810,45 @@ public class RPC { /** An RPC Server. */ public abstract static class Server extends org.apache.hadoop.ipc.Server { - boolean verbose; - static String classNameBase(String className) { - String[] names = className.split("\\.", -1); - if (names == null || names.length == 0) { -return className; + +boolean verbose; + +private static final Pattern COMPLEX_SERVER_NAME_PATTERN = +Pattern.compile("(?:[^\\$]*\\$)*([A-Za-z][^\\$]+)(?:\\$\\d+)?"); + +/** + * Get a meaningful and short name for a server based on a java class. + * + * The rules are defined to support the current naming schema of the + * generated protobuf classes where the final class usually an anonymous + * inner class of an inner class. + * + * 1. For simple classes it returns with the simple name of the classes + * (with the name without package name) + * + * 2. For inner classes, this is the simple name of the inner class. + * + * 3. If it is an Object created from a class factory + * E.g., org.apache.hadoop.ipc.TestRPC$TestClass$2 + * this method returns parent class TestClass. + * + * 4. If it is an anonymous class E.g., 'org.apache.hadoop.ipc.TestRPC$10' + * serverNameFromClass returns parent class TestRPC. + * + * + */ +static String serverNameFromClass(Class clazz) { + String name = clazz.getName(); + String[] names = clazz.getName().split("\\.", -1); + if (names != null && names.length > 0) { +name =