HADOOP-7897. ProtobufRpcEngine client side exception mechanism is not consistent with WritableRpcEngine. Contributed by Suresh Srinivas.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1212004 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Suresh Srinivas 2011-12-08 17:47:06 +00:00
parent 9f69ae5a9e
commit 4283ac6d7a
3 changed files with 29 additions and 29 deletions

View File

@ -16,26 +16,26 @@ Trunk (unreleased changes)
HADOOP-7595. Upgrade dependency to Avro 1.5.3. (Alejandro Abdelnur via atm) HADOOP-7595. Upgrade dependency to Avro 1.5.3. (Alejandro Abdelnur via atm)
HADOOP-7524. Change RPC to allow multiple protocols including multuple HADOOP-7524. Change RPC to allow multiple protocols including multuple
versions of the same protocol (sanjay Radia) versions of the same protocol (sanjay Radia)
HADOOP-7607. Simplify the RPC proxy cleanup process. (atm) HADOOP-7607. Simplify the RPC proxy cleanup process. (atm)
HADOOP-7635. RetryInvocationHandler should release underlying resources on HADOOP-7635. RetryInvocationHandler should release underlying resources on
close (atm) close (atm)
HADOOP-7687 Make getProtocolSignature public (sanjay) HADOOP-7687 Make getProtocolSignature public (sanjay)
HADOOP-7693. Enhance AvroRpcEngine to support the new #addProtocol HADOOP-7693. Enhance AvroRpcEngine to support the new #addProtocol
interface introduced in HADOOP-7524. (cutting) interface introduced in HADOOP-7524. (cutting)
HADOOP-7716. RPC protocol registration on SS does not log the protocol name HADOOP-7716. RPC protocol registration on SS does not log the protocol name
(only the class which may be different) (sanjay) (only the class which may be different) (sanjay)
HADOOP-7717. Move handling of concurrent client fail-overs to HADOOP-7717. Move handling of concurrent client fail-overs to
RetryInvocationHandler (atm) RetryInvocationHandler (atm)
HADOOP-6490. Use StringUtils over String#replace in Path#normalizePath. HADOOP-6490. Use StringUtils over String#replace in Path#normalizePath.
(Uma Maheswara Rao G via harsh) (Uma Maheswara Rao G via harsh)
HADOOP-7736. Remove duplicate Path#normalizePath call. (harsh) HADOOP-7736. Remove duplicate Path#normalizePath call. (harsh)
@ -121,7 +121,10 @@ Trunk (unreleased changes)
KerberosName name rules from configuration. (tucu) KerberosName name rules from configuration. (tucu)
HADOOP-7888. TestFailoverProxy fails intermittently on trunk. (Jason Lowe HADOOP-7888. TestFailoverProxy fails intermittently on trunk. (Jason Lowe
via atm) via atm)
HADOOP-7897. ProtobufRpcEngine client side exception mechanism is not
consistent with WritableRpcEngine. (suresh)
OPTIMIZATIONS OPTIMIZATIONS

View File

@ -33,14 +33,17 @@ private ProtobufHelper() {
} }
/** /**
* Return the RemoteException wrapped in ServiceException as cause. * Return the IOException thrown by the remote server wrapped in
* @param se ServiceException that wraps RemoteException * ServiceException as cause.
* @return RemoteException wrapped in ServiceException or * @param se ServiceException that wraps IO exception thrown by the server
* a new IOException that wraps unexpected ServiceException. * @return Exception wrapped in ServiceException or
* a new IOException that wraps the unexpected ServiceException.
*/ */
public static IOException getRemoteException(ServiceException se) { public static IOException getRemoteException(ServiceException se) {
Throwable e = se.getCause(); Throwable e = se.getCause();
return ((e instanceof RemoteException) ? (IOException) e : if (e == null) {
new IOException(se)); return new IOException(se);
}
return e instanceof IOException ? (IOException) e : new IOException(se);
} }
} }

View File

@ -144,9 +144,10 @@ private HadoopRpcRequestProto constructRpcRequest(Method method,
* *
* ServiceException has the following causes: * ServiceException has the following causes:
* <ol> * <ol>
* <li>Exceptions encountered in this methods are thrown as * <li>Exceptions encountered on the client side in this method are
* RpcClientException, wrapped in RemoteException</li> * set as cause in ServiceException as is.</li>
* <li>Remote exceptions are thrown wrapped in RemoteException</li> * <li>Exceptions from the server are wrapped in RemoteException and are
* set as cause in ServiceException</li>
* </ol> * </ol>
* *
* Note that the client calling protobuf RPC methods, must handle * Note that the client calling protobuf RPC methods, must handle
@ -167,9 +168,8 @@ public Object invoke(Object proxy, Method method, Object[] args)
try { try {
val = (RpcResponseWritable) client.call(RpcKind.RPC_PROTOCOL_BUFFER, val = (RpcResponseWritable) client.call(RpcKind.RPC_PROTOCOL_BUFFER,
new RpcRequestWritable(rpcRequest), remoteId); new RpcRequestWritable(rpcRequest), remoteId);
} catch (Exception e) { } catch (Throwable e) {
RpcClientException ce = new RpcClientException("Client exception", e); throw new ServiceException(e);
throw new ServiceException(getRemoteException(ce));
} }
HadoopRpcResponseProto response = val.message; HadoopRpcResponseProto response = val.message;
@ -197,9 +197,8 @@ public Object invoke(Object proxy, Method method, Object[] args)
try { try {
returnMessage = prototype.newBuilderForType() returnMessage = prototype.newBuilderForType()
.mergeFrom(response.getResponse()).build(); .mergeFrom(response.getResponse()).build();
} catch (InvalidProtocolBufferException e) { } catch (Throwable e) {
RpcClientException ce = new RpcClientException("Client exception", e); throw new ServiceException(e);
throw new ServiceException(getRemoteException(ce));
} }
return returnMessage; return returnMessage;
} }
@ -309,11 +308,6 @@ public RPC.Server getServer(Class<?> protocol, Object protocolImpl,
numHandlers, numReaders, queueSizePerHandler, verbose, secretManager); numHandlers, numReaders, queueSizePerHandler, verbose, secretManager);
} }
private static RemoteException getRemoteException(Exception e) {
return new RemoteException(e.getClass().getName(),
StringUtils.stringifyException(e));
}
public static class Server extends RPC.Server { public static class Server extends RPC.Server {
/** /**
* Construct an RPC server. * Construct an RPC server.
@ -335,8 +329,8 @@ public Server(Class<?> protocolClass, Object protocolImpl,
numReaders, queueSizePerHandler, conf, classNameBase(protocolImpl numReaders, queueSizePerHandler, conf, classNameBase(protocolImpl
.getClass().getName()), secretManager); .getClass().getName()), secretManager);
this.verbose = verbose; this.verbose = verbose;
registerProtocolAndImpl(RpcKind.RPC_PROTOCOL_BUFFER, registerProtocolAndImpl(RpcKind.RPC_PROTOCOL_BUFFER, protocolClass,
protocolClass, protocolImpl); protocolImpl);
} }
private static RpcResponseWritable handleException(Throwable e) { private static RpcResponseWritable handleException(Throwable e) {