Allow more fields for object metadata (#12484)

This commit is contained in:
Philipp Moritz
2020-11-29 21:50:18 -08:00
committed by GitHub
parent f1cc33a6a6
commit cf73ccddae
5 changed files with 36 additions and 23 deletions
@@ -1,5 +1,6 @@
package io.ray.runtime.object;
import com.google.common.primitives.Bytes;
import com.google.protobuf.InvalidProtocolBufferException;
import io.ray.api.id.ObjectId;
import io.ray.runtime.actor.NativeActorHandle;
@@ -64,21 +65,21 @@ public class ObjectSerializer {
if (meta != null && meta.length > 0) {
// If meta is not null, deserialize the object from meta.
if (Arrays.equals(meta, OBJECT_METADATA_TYPE_RAW)) {
if (Bytes.indexOf(meta, OBJECT_METADATA_TYPE_RAW) == 0) {
if (objectType == ByteBuffer.class) {
return ByteBuffer.wrap(data);
}
return data;
} else if (Arrays.equals(meta, OBJECT_METADATA_TYPE_CROSS_LANGUAGE) ||
Arrays.equals(meta, OBJECT_METADATA_TYPE_JAVA)) {
} else if (Bytes.indexOf(meta, OBJECT_METADATA_TYPE_CROSS_LANGUAGE) == 0 ||
Bytes.indexOf(meta, OBJECT_METADATA_TYPE_JAVA) == 0) {
return Serializer.decode(data, objectType);
} else if (Arrays.equals(meta, WORKER_EXCEPTION_META)) {
} else if (Bytes.indexOf(meta, WORKER_EXCEPTION_META) == 0) {
return new RayWorkerException();
} else if (Arrays.equals(meta, ACTOR_EXCEPTION_META)) {
} else if (Bytes.indexOf(meta, ACTOR_EXCEPTION_META) == 0) {
return new RayActorException(IdUtil.getActorIdFromObjectId(objectId));
} else if (Arrays.equals(meta, UNRECONSTRUCTABLE_EXCEPTION_META)) {
} else if (Bytes.indexOf(meta, UNRECONSTRUCTABLE_EXCEPTION_META) == 0) {
return new UnreconstructableException(objectId);
} else if (Arrays.equals(meta, TASK_EXECUTION_EXCEPTION_META)) {
} else if (Bytes.indexOf(meta, TASK_EXECUTION_EXCEPTION_META) == 0) {
// Serialization logic of task execution exception: an instance of
// `io.ray.runtime.exception.RayTaskException`
// -> a `RayException` protobuf message
@@ -94,10 +95,10 @@ public class ObjectSerializer {
"Can't deserialize RayTaskException object: " + objectId
.toString());
}
} else if (Arrays.equals(meta, OBJECT_METADATA_TYPE_ACTOR_HANDLE)) {
} else if (Bytes.indexOf(meta, OBJECT_METADATA_TYPE_ACTOR_HANDLE) == 0) {
byte[] serialized = Serializer.decode(data, byte[].class);
return NativeActorHandle.fromBytes(serialized);
} else if (Arrays.equals(meta, OBJECT_METADATA_TYPE_PYTHON)) {
} else if (Bytes.indexOf(meta, OBJECT_METADATA_TYPE_PYTHON) == 0) {
throw new IllegalArgumentException("Can't deserialize Python object: " + objectId
.toString());
}
@@ -1,6 +1,7 @@
package io.ray.runtime.task;
import com.google.common.base.Preconditions;
import com.google.common.primitives.Bytes;
import io.ray.api.ObjectRef;
import io.ray.api.Ray;
import io.ray.api.id.ObjectId;
@@ -50,9 +51,12 @@ public class ArgumentsBuilder {
value = ObjectSerializer.serialize(arg);
if (language != Language.JAVA) {
boolean isCrossData =
Arrays.equals(value.metadata, ObjectSerializer.OBJECT_METADATA_TYPE_CROSS_LANGUAGE) ||
Arrays.equals(value.metadata, ObjectSerializer.OBJECT_METADATA_TYPE_RAW) ||
Arrays.equals(value.metadata, ObjectSerializer.OBJECT_METADATA_TYPE_ACTOR_HANDLE);
Bytes.indexOf(value.metadata,
ObjectSerializer.OBJECT_METADATA_TYPE_CROSS_LANGUAGE) == 0 ||
Bytes.indexOf(value.metadata,
ObjectSerializer.OBJECT_METADATA_TYPE_RAW) == 0 ||
Bytes.indexOf(value.metadata,
ObjectSerializer.OBJECT_METADATA_TYPE_ACTOR_HANDLE) == 0;
if (!isCrossData) {
throw new IllegalArgumentException(String.format("Can't transfer %s data to %s",
Arrays.toString(value.metadata), language.getValueDescriptor().getName()));