[Java] Support concurrent actor calls API. (#7022)

* WIP

Temp change

Attach native thread to jvm

* Fix run mode

* Address comments.
This commit is contained in:
Qing Wang
2020-02-14 13:02:39 +08:00
committed by GitHub
parent 0d3687a10d
commit f3703bafa3
13 changed files with 139 additions and 21 deletions
@@ -95,8 +95,8 @@ public final class RayNativeRuntime extends AbstractRayRuntime {
new GcsClientOptions(rayConfig));
Preconditions.checkState(nativeCoreWorkerPointer != 0);
taskExecutor = new NativeTaskExecutor(nativeCoreWorkerPointer, this);
workerContext = new NativeWorkerContext(nativeCoreWorkerPointer);
taskExecutor = new NativeTaskExecutor(nativeCoreWorkerPointer, this);
objectStore = new NativeObjectStore(workerContext, nativeCoreWorkerPointer);
taskSubmitter = new NativeTaskSubmitter(nativeCoreWorkerPointer);
@@ -153,13 +153,17 @@ public final class RayNativeRuntime extends AbstractRayRuntime {
}
public void run() {
nativeRunTaskExecutor(nativeCoreWorkerPointer, taskExecutor);
nativeRunTaskExecutor(nativeCoreWorkerPointer);
}
public long getNativeCoreWorkerPointer() {
return nativeCoreWorkerPointer;
}
public TaskExecutor getTaskExecutor() {
return taskExecutor;
}
/**
* Register this worker or driver to GCS.
*/
@@ -189,8 +193,7 @@ public final class RayNativeRuntime extends AbstractRayRuntime {
String rayletSocket, String nodeIpAddress, int nodeManagerPort, byte[] jobId,
GcsClientOptions gcsClientOptions);
private static native void nativeRunTaskExecutor(long nativeCoreWorkerPointer,
TaskExecutor taskExecutor);
private static native void nativeRunTaskExecutor(long nativeCoreWorkerPointer);
private static native void nativeDestroyCoreWorker(long nativeCoreWorkerPointer);
@@ -3,11 +3,15 @@ package org.ray.runtime.task;
import com.google.common.base.Preconditions;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import org.ray.api.exception.RayTaskException;
import org.ray.api.id.ActorId;
import org.ray.api.id.JobId;
import org.ray.api.id.TaskId;
import org.ray.api.id.UniqueId;
import org.ray.runtime.AbstractRayRuntime;
import org.ray.runtime.config.RayConfig;
import org.ray.runtime.config.RunMode;
import org.ray.runtime.functionmanager.JavaFunctionDescriptor;
import org.ray.runtime.functionmanager.RayFunction;
import org.ray.runtime.generated.Common.TaskType;
@@ -23,6 +27,10 @@ public abstract class TaskExecutor {
private static final Logger LOGGER = LoggerFactory.getLogger(TaskExecutor.class);
// A helper map to help we get the corresponding executor for the given worker in JNI.
private static ConcurrentHashMap<UniqueId, TaskExecutor> taskExecutors
= new ConcurrentHashMap<>();
protected final AbstractRayRuntime runtime;
/**
@@ -37,6 +45,13 @@ public abstract class TaskExecutor {
protected TaskExecutor(AbstractRayRuntime runtime) {
this.runtime = runtime;
if (RayConfig.getInstance().runMode == RunMode.CLUSTER) {
taskExecutors.put(runtime.getWorkerContext().getCurrentWorkerId(), this);
}
}
public static TaskExecutor get(byte[] workerId) {
return taskExecutors.get(new UniqueId(workerId));
}
protected List<NativeRayObject> execute(List<String> rayFunctionInfo,