[xlang] Cross language serialization for ActorHandle (#10335)

This commit is contained in:
fyrestone
2020-09-02 10:11:53 +08:00
committed by GitHub
parent 65f17f2e14
commit b04222dbd9
8 changed files with 48 additions and 18 deletions
@@ -167,23 +167,21 @@ public class CrossLanguageInvocationTest extends BaseMultiLanguageTest {
// Create a java actor, and pass actor handle to python.
ActorHandle<TestActor> javaActor = Ray.actor(TestActor::new, "1".getBytes()).remote();
Preconditions.checkState(javaActor instanceof NativeActorHandle);
byte[] actorHandleBytes = ((NativeActorHandle) javaActor).toBytes();
ObjectRef<byte[]> res = Ray.task(
PyFunction.of(PYTHON_MODULE,
"py_func_call_java_actor_from_handle",
byte[].class),
actorHandleBytes).remote();
javaActor).remote();
Assert.assertEquals(res.get(), "12".getBytes());
// Create a python actor, and pass actor handle to python.
PyActorHandle pyActor = Ray.actor(
PyActorClass.of(PYTHON_MODULE, "Counter"), "1".getBytes()).remote();
Preconditions.checkState(pyActor instanceof NativeActorHandle);
actorHandleBytes = ((NativeActorHandle) pyActor).toBytes();
res = Ray.task(
PyFunction.of(PYTHON_MODULE,
"py_func_call_python_actor_from_handle",
byte[].class),
actorHandleBytes).remote();
pyActor).remote();
Assert.assertEquals(res.get(), "3".getBytes());
}
@@ -301,9 +299,8 @@ public class CrossLanguageInvocationTest extends BaseMultiLanguageTest {
return l;
}
public static byte[] callPythonActorHandle(byte[] value) {
public static byte[] callPythonActorHandle(PyActorHandle actor) {
// This function will be called from test_cross_language_invocation.py
NativePyActorHandle actor = (NativePyActorHandle) NativeActorHandle.fromBytes(value);
ObjectRef<byte[]> res = actor.task(
PyActorMethod.of("increase", byte[].class),
"1".getBytes()).remote();
@@ -59,17 +59,13 @@ def py_func_call_java_actor(value):
@ray.remote
def py_func_call_java_actor_from_handle(value):
assert isinstance(value, bytes)
actor_handle = ray.actor.ActorHandle._deserialization_helper(value)
def py_func_call_java_actor_from_handle(actor_handle):
r = actor_handle.concat.remote(b"2")
return ray.get(r)
@ray.remote
def py_func_call_python_actor_from_handle(value):
assert isinstance(value, bytes)
actor_handle = ray.actor.ActorHandle._deserialization_helper(value)
def py_func_call_python_actor_from_handle(actor_handle):
r = actor_handle.increase.remote(2)
return ray.get(r)
@@ -79,7 +75,7 @@ def py_func_pass_python_actor_handle():
counter = Counter.remote(2)
f = ray.java_function("io.ray.test.CrossLanguageInvocationTest",
"callPythonActorHandle")
r = f.remote(counter._serialization_helper()[0])
r = f.remote(counter)
return ray.get(r)