HADOOP-8367 Improve documentation of declaringClassProtocolName in rpc headers (Sanjay Radia)
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1342051 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
74dfa8f1f2
commit
266a0f1de9
|
@ -70,6 +70,9 @@ Trunk (unreleased changes)
|
||||||
HADOOP-8360. empty-configuration.xml fails xml validation
|
HADOOP-8360. empty-configuration.xml fails xml validation
|
||||||
(Radim Kolar via harsh)
|
(Radim Kolar via harsh)
|
||||||
|
|
||||||
|
HADOOP-8367 Improve documentation of declaringClassProtocolName in rpc headers
|
||||||
|
(Sanjay Radia)
|
||||||
|
|
||||||
BUG FIXES
|
BUG FIXES
|
||||||
|
|
||||||
HADOOP-8177. MBeans shouldn't try to register when it fails to create MBeanName.
|
HADOOP-8177. MBeans shouldn't try to register when it fails to create MBeanName.
|
||||||
|
|
|
@ -396,24 +396,44 @@ public class ProtobufRpcEngine implements RpcEngine {
|
||||||
* it is.</li>
|
* it is.</li>
|
||||||
* </ol>
|
* </ol>
|
||||||
*/
|
*/
|
||||||
public Writable call(RPC.Server server, String protocol,
|
public Writable call(RPC.Server server, String connectionProtocolName,
|
||||||
Writable writableRequest, long receiveTime) throws Exception {
|
Writable writableRequest, long receiveTime) throws Exception {
|
||||||
RpcRequestWritable request = (RpcRequestWritable) writableRequest;
|
RpcRequestWritable request = (RpcRequestWritable) writableRequest;
|
||||||
HadoopRpcRequestProto rpcRequest = request.message;
|
HadoopRpcRequestProto rpcRequest = request.message;
|
||||||
String methodName = rpcRequest.getMethodName();
|
String methodName = rpcRequest.getMethodName();
|
||||||
String protoName = rpcRequest.getDeclaringClassProtocolName();
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RPCs for a particular interface (ie protocol) are done using a
|
||||||
|
* IPC connection that is setup using rpcProxy.
|
||||||
|
* The rpcProxy's has a declared protocol name that is
|
||||||
|
* sent form client to server at connection time.
|
||||||
|
*
|
||||||
|
* Each Rpc call also sends a protocol name
|
||||||
|
* (called declaringClassprotocolName). This name is usually the same
|
||||||
|
* as the connection protocol name except in some cases.
|
||||||
|
* For example metaProtocols such ProtocolInfoProto which get info
|
||||||
|
* about the protocol reuse the connection but need to indicate that
|
||||||
|
* the actual protocol is different (i.e. the protocol is
|
||||||
|
* ProtocolInfoProto) since they reuse the connection; in this case
|
||||||
|
* the declaringClassProtocolName field is set to the ProtocolInfoProto.
|
||||||
|
*/
|
||||||
|
|
||||||
|
String declaringClassProtoName =
|
||||||
|
rpcRequest.getDeclaringClassProtocolName();
|
||||||
long clientVersion = rpcRequest.getClientProtocolVersion();
|
long clientVersion = rpcRequest.getClientProtocolVersion();
|
||||||
if (server.verbose)
|
if (server.verbose)
|
||||||
LOG.info("Call: protocol=" + protocol + ", method=" + methodName);
|
LOG.info("Call: connectionProtocolName=" + connectionProtocolName +
|
||||||
|
", method=" + methodName);
|
||||||
|
|
||||||
ProtoClassProtoImpl protocolImpl = getProtocolImpl(server, protoName,
|
ProtoClassProtoImpl protocolImpl = getProtocolImpl(server,
|
||||||
clientVersion);
|
declaringClassProtoName, clientVersion);
|
||||||
BlockingService service = (BlockingService) protocolImpl.protocolImpl;
|
BlockingService service = (BlockingService) protocolImpl.protocolImpl;
|
||||||
MethodDescriptor methodDescriptor = service.getDescriptorForType()
|
MethodDescriptor methodDescriptor = service.getDescriptorForType()
|
||||||
.findMethodByName(methodName);
|
.findMethodByName(methodName);
|
||||||
if (methodDescriptor == null) {
|
if (methodDescriptor == null) {
|
||||||
String msg = "Unknown method " + methodName + " called on " + protocol
|
String msg = "Unknown method " + methodName + " called on "
|
||||||
+ " protocol.";
|
+ connectionProtocolName + " protocol.";
|
||||||
LOG.warn(msg);
|
LOG.warn(msg);
|
||||||
throw new RpcServerException(msg);
|
throw new RpcServerException(msg);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,21 @@ message HadoopRpcRequestProto {
|
||||||
/** Bytes corresponding to the client protobuf request */
|
/** Bytes corresponding to the client protobuf request */
|
||||||
optional bytes request = 2;
|
optional bytes request = 2;
|
||||||
|
|
||||||
/** protocol name of class declaring the called method */
|
/**
|
||||||
|
* RPCs for a particular interface (ie protocol) are done using a
|
||||||
|
* IPC connection that is setup using rpcProxy.
|
||||||
|
* The rpcProxy's has a declared protocol name that is
|
||||||
|
* sent form client to server at connection time.
|
||||||
|
*
|
||||||
|
* Each Rpc call also sends a protocol name
|
||||||
|
* (called declaringClassprotocolName). This name is usually the same
|
||||||
|
* as the connection protocol name except in some cases.
|
||||||
|
* For example metaProtocols such ProtocolInfoProto which get metainfo
|
||||||
|
* about the protocol reuse the connection but need to indicate that
|
||||||
|
* the actual protocol is different (i.e. the protocol is
|
||||||
|
* ProtocolInfoProto) since they reuse the connection; in this case
|
||||||
|
* the declaringClassProtocolName field is set to the ProtocolInfoProto
|
||||||
|
*/
|
||||||
required string declaringClassProtocolName = 3;
|
required string declaringClassProtocolName = 3;
|
||||||
|
|
||||||
/** protocol version of class declaring the called method */
|
/** protocol version of class declaring the called method */
|
||||||
|
|
Loading…
Reference in New Issue