[Java] Support direct call for normal tasks (#7193)

This commit is contained in:
Kai Yang
2020-02-21 10:03:34 +08:00
committed by GitHub
parent f27bb6eb47
commit 007333b960
21 changed files with 184 additions and 99 deletions
@@ -10,24 +10,17 @@ public class ActorCreationOptions extends BaseTaskOptions {
public static final int NO_RECONSTRUCTION = 0;
public static final int INFINITE_RECONSTRUCTION = (int) Math.pow(2, 30);
// DO NOT set this environment variable. It's only used for test purposes.
// Please use `setUseDirectCall` instead.
public static final boolean DEFAULT_USE_DIRECT_CALL = "1"
.equals(System.getenv("ACTOR_CREATION_OPTIONS_DEFAULT_USE_DIRECT_CALL"));
public final int maxReconstructions;
public final boolean useDirectCall;
public final String jvmOptions;
public final int maxConcurrency;
private ActorCreationOptions(Map<String, Double> resources, int maxReconstructions,
boolean useDirectCall, String jvmOptions, int maxConcurrency) {
super(resources);
super(resources, useDirectCall);
this.maxReconstructions = maxReconstructions;
this.useDirectCall = useDirectCall;
this.jvmOptions = jvmOptions;
this.maxConcurrency = maxConcurrency;
}
@@ -7,13 +7,21 @@ import java.util.Map;
* The options class for RayCall or ActorCreation.
*/
public abstract class BaseTaskOptions {
// DO NOT set this environment variable. It's only used for test purposes.
// Please use `setUseDirectCall` instead.
public static final boolean DEFAULT_USE_DIRECT_CALL = "1"
.equals(System.getenv("DEFAULT_USE_DIRECT_CALL"));
public final Map<String, Double> resources;
public final boolean useDirectCall;
public BaseTaskOptions() {
resources = new HashMap<>();
useDirectCall = DEFAULT_USE_DIRECT_CALL;
}
public BaseTaskOptions(Map<String, Double> resources) {
public BaseTaskOptions(Map<String, Double> resources, boolean useDirectCall) {
for (Map.Entry<String, Double> entry : resources.entrySet()) {
if (entry.getValue().compareTo(0.0) <= 0) {
throw new IllegalArgumentException(String.format("Resource capacity should be " +
@@ -21,6 +29,7 @@ public abstract class BaseTaskOptions {
}
}
this.resources = resources;
this.useDirectCall = useDirectCall;
}
}
@@ -8,8 +8,8 @@ import java.util.Map;
*/
public class CallOptions extends BaseTaskOptions {
private CallOptions(Map<String, Double> resources) {
super(resources);
private CallOptions(Map<String, Double> resources, boolean useDirectCall) {
super(resources, useDirectCall);
}
/**
@@ -18,14 +18,23 @@ public class CallOptions extends BaseTaskOptions {
public static class Builder {
private Map<String, Double> resources = new HashMap<>();
private boolean useDirectCall = DEFAULT_USE_DIRECT_CALL;
public Builder setResources(Map<String, Double> resources) {
this.resources = resources;
return this;
}
// Since direct call is not fully supported yet (see issue #5559),
// users are not allowed to set the option to true.
// TODO (kfstorm): uncomment when direct call is ready.
// public Builder setUseDirectCall(boolean useDirectCall) {
// this.useDirectCall = useDirectCall;
// return this;
// }
public CallOptions createCallOptions() {
return new CallOptions(resources);
return new CallOptions(resources, useDirectCall);
}
}
}