HBASE-8987 ProtobufUtil.toException doesn't handle plain RemoteException, gets a NoSuchMethodException
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1504591 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
25e14c8b48
commit
20e0f2b625
|
@ -1204,17 +1204,22 @@ public final class ProtobufUtil {
|
||||||
* @throws IOException if failed to deserialize the parameter
|
* @throws IOException if failed to deserialize the parameter
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static Throwable toException(
|
public static Throwable toException(final NameBytesPair parameter) throws IOException {
|
||||||
final NameBytesPair parameter) throws IOException {
|
|
||||||
if (parameter == null || !parameter.hasValue()) return null;
|
if (parameter == null || !parameter.hasValue()) return null;
|
||||||
String desc = parameter.getValue().toStringUtf8();
|
String desc = parameter.getValue().toStringUtf8();
|
||||||
String type = parameter.getName();
|
String type = parameter.getName();
|
||||||
try {
|
try {
|
||||||
Class<? extends Throwable> c =
|
Class<? extends Throwable> c =
|
||||||
(Class<? extends Throwable>)Class.forName(type, true, CLASS_LOADER);
|
(Class<? extends Throwable>)Class.forName(type, true, CLASS_LOADER);
|
||||||
Constructor<? extends Throwable> cn =
|
Constructor<? extends Throwable> cn = null;
|
||||||
c.getDeclaredConstructor(String.class);
|
try {
|
||||||
return cn.newInstance(desc);
|
cn = c.getDeclaredConstructor(String.class);
|
||||||
|
return cn.newInstance(desc);
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
// Could be a raw RemoteException. See HBASE-8987.
|
||||||
|
cn = c.getDeclaredConstructor(String.class, String.class);
|
||||||
|
return cn.newInstance(type, desc);
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new IOException(e);
|
throw new IOException(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.Col
|
||||||
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.ColumnValue.QualifierValue;
|
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.ColumnValue.QualifierValue;
|
||||||
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.DeleteType;
|
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.DeleteType;
|
||||||
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;
|
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;
|
||||||
|
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameBytesPair;
|
||||||
import org.apache.hadoop.hbase.util.Bytes;
|
import org.apache.hadoop.hbase.util.Bytes;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.junit.experimental.categories.Category;
|
||||||
|
@ -47,6 +48,20 @@ import com.google.protobuf.ByteString;
|
||||||
*/
|
*/
|
||||||
@Category(SmallTests.class)
|
@Category(SmallTests.class)
|
||||||
public class TestProtobufUtil {
|
public class TestProtobufUtil {
|
||||||
|
@Test
|
||||||
|
public void testException() throws IOException {
|
||||||
|
NameBytesPair.Builder builder = NameBytesPair.newBuilder();
|
||||||
|
final String omg = "OMG!!!";
|
||||||
|
builder.setName("java.io.IOException");
|
||||||
|
builder.setValue(ByteString.copyFrom(Bytes.toBytes(omg)));
|
||||||
|
Throwable t = ProtobufUtil.toException(builder.build());
|
||||||
|
assertEquals(omg, t.getMessage());
|
||||||
|
builder.clear();
|
||||||
|
builder.setName("org.apache.hadoop.ipc.RemoteException");
|
||||||
|
builder.setValue(ByteString.copyFrom(Bytes.toBytes(omg)));
|
||||||
|
t = ProtobufUtil.toException(builder.build());
|
||||||
|
assertEquals(omg, t.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test basic Get conversions.
|
* Test basic Get conversions.
|
||||||
|
|
Loading…
Reference in New Issue