diff --git a/java/runtime/src/main/java/io/ray/runtime/exception/RayActorException.java b/java/runtime/src/main/java/io/ray/runtime/exception/RayActorException.java index e73c41845..4765be5cb 100644 --- a/java/runtime/src/main/java/io/ray/runtime/exception/RayActorException.java +++ b/java/runtime/src/main/java/io/ray/runtime/exception/RayActorException.java @@ -12,4 +12,12 @@ public class RayActorException extends RayException { super("The actor died unexpectedly before finishing this task."); } + public RayActorException(String message) { + super(message); + } + + public RayActorException(String message, Throwable cause) { + super(message, cause); + } + } diff --git a/java/runtime/src/main/java/io/ray/runtime/exception/RayWorkerException.java b/java/runtime/src/main/java/io/ray/runtime/exception/RayWorkerException.java index e24b55a61..acb47c806 100644 --- a/java/runtime/src/main/java/io/ray/runtime/exception/RayWorkerException.java +++ b/java/runtime/src/main/java/io/ray/runtime/exception/RayWorkerException.java @@ -9,4 +9,12 @@ public class RayWorkerException extends RayException { super("The worker died unexpectedly while executing this task."); } + public RayWorkerException(String message) { + super(message); + } + + public RayWorkerException(String message, Throwable cause) { + super(message, cause); + } + } diff --git a/java/runtime/src/main/java/io/ray/runtime/exception/UnreconstructableException.java b/java/runtime/src/main/java/io/ray/runtime/exception/UnreconstructableException.java index a99e9c075..719b22141 100644 --- a/java/runtime/src/main/java/io/ray/runtime/exception/UnreconstructableException.java +++ b/java/runtime/src/main/java/io/ray/runtime/exception/UnreconstructableException.java @@ -11,7 +11,7 @@ import io.ray.api.id.ObjectId; */ public class UnreconstructableException extends RayException { - public final ObjectId objectId; + public ObjectId objectId; public UnreconstructableException(ObjectId objectId) { super(String.format( @@ -20,4 +20,12 @@ public class UnreconstructableException extends RayException { this.objectId = objectId; } + public UnreconstructableException(String message) { + super(message); + } + + public UnreconstructableException(String message, Throwable cause) { + super(message, cause); + } + } diff --git a/java/test/src/main/java/io/ray/test/FailureTest.java b/java/test/src/main/java/io/ray/test/FailureTest.java index 15de867d7..07eca0263 100644 --- a/java/test/src/main/java/io/ray/test/FailureTest.java +++ b/java/test/src/main/java/io/ray/test/FailureTest.java @@ -4,9 +4,11 @@ import io.ray.api.ActorHandle; import io.ray.api.ObjectRef; import io.ray.api.Ray; import io.ray.api.function.RayFunc0; +import io.ray.api.id.ObjectId; import io.ray.runtime.exception.RayActorException; import io.ray.runtime.exception.RayTaskException; import io.ray.runtime.exception.RayWorkerException; +import io.ray.runtime.exception.UnreconstructableException; import java.time.Duration; import java.time.Instant; import java.util.Arrays; @@ -145,5 +147,24 @@ public class FailureTest extends BaseTest { } } } + + public void testExceptionSerialization() { + RayTaskException ex1 = Assert.expectThrows(RayTaskException.class, () -> { + Ray.put(new RayTaskException("xxx", new RayActorException())).get(); + }); + Assert.assertEquals(ex1.getCause().getClass(), RayActorException.class); + RayTaskException ex2 = Assert.expectThrows(RayTaskException.class, () -> { + Ray.put(new RayTaskException("xxx", new RayWorkerException())).get(); + }); + Assert.assertEquals(ex2.getCause().getClass(), RayWorkerException.class); + + ObjectId objectId = ObjectId.fromRandom(); + RayTaskException ex3 = Assert.expectThrows(RayTaskException.class, () -> { + Ray.put(new RayTaskException("xxx", new UnreconstructableException(objectId))) + .get(); + }); + Assert.assertEquals(ex3.getCause().getClass(), UnreconstructableException.class); + Assert.assertEquals(((UnreconstructableException) ex3.getCause()).objectId, objectId); + } }