YARN-3770. SerializedException should also handle java.lang.Error on de-serialization. Contributed by Lavkesh Lahngir
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/bcb992af Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/bcb992af Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/bcb992af Branch: refs/heads/YARN-2928 Commit: bcb992af7ae0d0317a3cf314c75090642bbab603 Parents: 3aff2fd Author: Jian He <[email protected]> Authored: Mon Jun 29 14:31:32 2015 -0700 Committer: Zhijie Shen <[email protected]> Committed: Mon Jul 6 11:30:02 2015 -0700 ---------------------------------------------------------------------- hadoop-yarn-project/CHANGES.txt | 3 +++ .../api/records/impl/pb/SerializedExceptionPBImpl.java | 2 +- .../records/impl/pb/TestSerializedExceptionPBImpl.java | 12 ++++++++++-- 3 files changed, 14 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/bcb992af/hadoop-yarn-project/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 83b58ba..d8cfa4b 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -674,6 +674,9 @@ Release 2.8.0 - UNRELEASED YARN-3695. ServerProxy (NMProxy, etc.) shouldn't retry forever for non network exception. (Raju Bairishetti via jianhe) + YARN-3770. SerializedException should also handle java.lang.Error on + de-serialization. (Lavkesh Lahngir via jianhe) + Release 2.7.2 - UNRELEASED INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/bcb992af/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/SerializedExceptionPBImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/SerializedExceptionPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/SerializedExceptionPBImpl.java index fd9e170..2ec232e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/SerializedExceptionPBImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/SerializedExceptionPBImpl.java @@ -101,7 +101,7 @@ public class SerializedExceptionPBImpl extends SerializedException { } else if (RuntimeException.class.isAssignableFrom(realClass)) { classType = RuntimeException.class; } else { - classType = Exception.class; + classType = Throwable.class; } return instantiateException(realClass.asSubclass(classType), getMessage(), cause == null ? null : cause.deSerialize()); http://git-wip-us.apache.org/repos/asf/hadoop/blob/bcb992af/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/records/impl/pb/TestSerializedExceptionPBImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/records/impl/pb/TestSerializedExceptionPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/records/impl/pb/TestSerializedExceptionPBImpl.java index ac7e40e..ecfa63e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/records/impl/pb/TestSerializedExceptionPBImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/records/impl/pb/TestSerializedExceptionPBImpl.java @@ -20,10 +20,9 @@ package org.apache.hadoop.yarn.api.records.impl.pb; import java.nio.channels.ClosedChannelException; -import org.junit.Assert; -import org.apache.hadoop.yarn.api.records.impl.pb.SerializedExceptionPBImpl; import org.apache.hadoop.yarn.exceptions.YarnRuntimeException; import org.apache.hadoop.yarn.proto.YarnProtos.SerializedExceptionProto; +import org.junit.Assert; import org.junit.Test; public class TestSerializedExceptionPBImpl { @@ -79,4 +78,13 @@ public class TestSerializedExceptionPBImpl { SerializedExceptionPBImpl pb3 = new SerializedExceptionPBImpl(); Assert.assertEquals(defaultProto.getTrace(), pb3.getRemoteTrace()); } + + @Test + public void testThrowableDeserialization() { + // java.lang.Error should also be serializable + Error ex = new Error(); + SerializedExceptionPBImpl pb = new SerializedExceptionPBImpl(); + pb.init(ex); + Assert.assertEquals(ex.getClass(), pb.deSerialize().getClass()); + } }
