HADOOP-9343. Allow additional exceptions through the RPC layer. (sseth)
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1452918 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
cc15fff263
commit
52703c2d0d
@ -363,6 +363,8 @@ Release 2.0.4-beta - UNRELEASED
|
||||
|
||||
HADOOP-9334. Upgrade netty version. (Nicolas Liochon via suresh)
|
||||
|
||||
HADOOP-9343. Allow additional exceptions through the RPC layer. (sseth)
|
||||
|
||||
OPTIMIZATIONS
|
||||
|
||||
BUG FIXES
|
||||
|
@ -24,6 +24,7 @@
|
||||
import java.io.DataOutput;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.UndeclaredThrowableException;
|
||||
import java.net.BindException;
|
||||
import java.net.InetAddress;
|
||||
import java.net.InetSocketAddress;
|
||||
@ -1788,6 +1789,9 @@ public Writable run() throws Exception {
|
||||
);
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
if (e instanceof UndeclaredThrowableException) {
|
||||
e = e.getCause();
|
||||
}
|
||||
String logMsg = getName() + ", call " + call + ": error: " + e;
|
||||
if (e instanceof RuntimeException || e instanceof Error) {
|
||||
// These exception types indicate something is probably wrong
|
||||
|
@ -1501,7 +1501,7 @@ public <T> T doAs(PrivilegedExceptionAction<T> action
|
||||
} else if (cause instanceof InterruptedException) {
|
||||
throw (InterruptedException) cause;
|
||||
} else {
|
||||
throw new UndeclaredThrowableException(pae,"Unknown exception in doAs");
|
||||
throw new UndeclaredThrowableException(cause);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.ipc.protobuf.TestProtos.EchoRequestProto;
|
||||
@ -83,6 +84,13 @@ public EmptyResponseProto error(RpcController unused,
|
||||
EmptyRequestProto request) throws ServiceException {
|
||||
throw new ServiceException("error", new RpcServerException("error"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public EmptyResponseProto error2(RpcController unused,
|
||||
EmptyRequestProto request) throws ServiceException {
|
||||
throw new ServiceException("error", new URISyntaxException("",
|
||||
"testException"));
|
||||
}
|
||||
}
|
||||
|
||||
public static class PBServer2Impl implements TestRpcService2 {
|
||||
@ -149,7 +157,7 @@ private static TestRpcService2 getClient2() throws IOException {
|
||||
conf);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Test (timeout=5000)
|
||||
public void testProtoBufRpc() throws Exception {
|
||||
TestRpcService client = getClient();
|
||||
testProtoBufRpc(client);
|
||||
@ -178,7 +186,7 @@ public static void testProtoBufRpc(TestRpcService client) throws Exception {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@Test (timeout=5000)
|
||||
public void testProtoBufRpc2() throws Exception {
|
||||
TestRpcService2 client = getClient2();
|
||||
|
||||
@ -201,4 +209,20 @@ public void testProtoBufRpc2() throws Exception {
|
||||
getMetrics(server.getRpcDetailedMetrics().name());
|
||||
assertCounterGt("Echo2NumOps", 0L, rpcDetailedMetrics);
|
||||
}
|
||||
|
||||
@Test (timeout=5000)
|
||||
public void testProtoBufRandomException() throws Exception {
|
||||
TestRpcService client = getClient();
|
||||
EmptyRequestProto emptyRequest = EmptyRequestProto.newBuilder().build();
|
||||
|
||||
try {
|
||||
client.error2(null, emptyRequest);
|
||||
} catch (ServiceException se) {
|
||||
Assert.assertTrue(se.getCause() instanceof RemoteException);
|
||||
RemoteException re = (RemoteException) se.getCause();
|
||||
Assert.assertTrue(re.getClassName().equals(
|
||||
URISyntaxException.class.getName()));
|
||||
Assert.assertTrue(re.getMessage().contains("testException"));
|
||||
}
|
||||
}
|
||||
}
|
@ -31,6 +31,7 @@ service TestProtobufRpcProto {
|
||||
rpc ping(EmptyRequestProto) returns (EmptyResponseProto);
|
||||
rpc echo(EchoRequestProto) returns (EchoResponseProto);
|
||||
rpc error(EmptyRequestProto) returns (EmptyResponseProto);
|
||||
rpc error2(EmptyRequestProto) returns (EmptyResponseProto);
|
||||
}
|
||||
|
||||
service TestProtobufRpc2Proto {
|
||||
|
Loading…
Reference in New Issue
Block a user