You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ki...@apache.org on 2016/08/09 19:34:03 UTC
hadoop git commit: HADOOP-13473. Tracing in IPC Server is broken.
Contributed by Daryn Sharp.
Repository: hadoop
Updated Branches:
refs/heads/trunk c4b77aed7 -> caf800d52
HADOOP-13473. Tracing in IPC Server is broken. Contributed by Daryn Sharp.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/caf800d5
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/caf800d5
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/caf800d5
Branch: refs/heads/trunk
Commit: caf800d5290d8618003b764afb0b3ef8d9a5a0a8
Parents: c4b77ae
Author: Kihwal Lee <ki...@apache.org>
Authored: Tue Aug 9 14:33:15 2016 -0500
Committer: Kihwal Lee <ki...@apache.org>
Committed: Tue Aug 9 14:33:15 2016 -0500
----------------------------------------------------------------------
.../apache/hadoop/ipc/ProtobufRpcEngine.java | 36 +++++++++++++++++---
1 file changed, 32 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/caf800d5/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 cce5166..eb30aa2 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
@@ -69,7 +69,7 @@ public class ProtobufRpcEngine implements RpcEngine {
static { // Register the rpcRequest deserializer for WritableRpcEngine
org.apache.hadoop.ipc.Server.registerProtocolEngine(
- RPC.RpcKind.RPC_PROTOCOL_BUFFER, RpcWritable.Buffer.class,
+ RPC.RpcKind.RPC_PROTOCOL_BUFFER, RpcProtobufRequest.class,
new Server.ProtoBufRpcInvoker());
}
@@ -613,9 +613,8 @@ public class ProtobufRpcEngine implements RpcEngine {
*/
public Writable call(RPC.Server server, String connectionProtocolName,
Writable writableRequest, long receiveTime) throws Exception {
- RpcWritable.Buffer request = (RpcWritable.Buffer) writableRequest;
- RequestHeaderProto rpcRequest =
- request.getValue(RequestHeaderProto.getDefaultInstance());
+ RpcProtobufRequest request = (RpcProtobufRequest) writableRequest;
+ RequestHeaderProto rpcRequest = request.getRequestHeader();
String methodName = rpcRequest.getMethodName();
/**
@@ -687,4 +686,33 @@ public class ProtobufRpcEngine implements RpcEngine {
}
}
}
+
+ // htrace in the ipc layer creates the span name based on toString()
+ // which uses the rpc header. in the normal case we want to defer decoding
+ // the rpc header until needed by the rpc engine.
+ static class RpcProtobufRequest extends RpcWritable.Buffer {
+ private RequestHeaderProto lazyHeader;
+
+ public RpcProtobufRequest() {
+ }
+
+ synchronized RequestHeaderProto getRequestHeader() throws IOException {
+ if (lazyHeader == null) {
+ lazyHeader = getValue(RequestHeaderProto.getDefaultInstance());
+ }
+ return lazyHeader;
+ }
+
+ // this is used by htrace to name the span.
+ @Override
+ public String toString() {
+ try {
+ RequestHeaderProto header = getRequestHeader();
+ return header.getDeclaringClassProtocolName() + "." +
+ header.getMethodName();
+ } catch (IOException e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org