From 4dd628a837a957dfc1905a521247bdf9aab4f9cb Mon Sep 17 00:00:00 2001 From: Qing Wang Date: Wed, 24 Apr 2019 10:50:35 +0800 Subject: [PATCH] [Java] Do not expose GcsClient to normal users (#4675) --- java/api/src/main/java/org/ray/api/Ray.java | 10 +--------- .../src/main/java/org/ray/api/gcs/GcsClient.java | 15 --------------- .../main/java/org/ray/api/runtime/RayRuntime.java | 5 +---- .../ray/api/{gcs => runtimecontext}/NodeInfo.java | 2 +- .../api/{ => runtimecontext}/RuntimeContext.java | 8 +++++++- .../java/org/ray/runtime/AbstractRayRuntime.java | 12 +++++------- .../java/org/ray/runtime/RayNativeRuntime.java | 4 ++-- .../java/org/ray/runtime/RuntimeContextImpl.java | 12 ++++++++---- .../src/main/java/org/ray/runtime/Worker.java | 3 +-- .../gcs/{GcsClientImpl.java => GcsClient.java} | 10 ++++------ .../org/ray/api/benchmark/MicroBenchmarks.java | 3 ++- .../main/java/org/ray/api/test/GcsClientTest.java | 6 +++--- .../java/org/ray/api/test/PlasmaFreeTest.java | 4 ++-- 13 files changed, 37 insertions(+), 57 deletions(-) delete mode 100644 java/api/src/main/java/org/ray/api/gcs/GcsClient.java rename java/api/src/main/java/org/ray/api/{gcs => runtimecontext}/NodeInfo.java (95%) rename java/api/src/main/java/org/ray/api/{ => runtimecontext}/RuntimeContext.java (86%) rename java/runtime/src/main/java/org/ray/runtime/gcs/{GcsClientImpl.java => GcsClient.java} (95%) diff --git a/java/api/src/main/java/org/ray/api/Ray.java b/java/api/src/main/java/org/ray/api/Ray.java index 38bc7e933..fa82ea685 100644 --- a/java/api/src/main/java/org/ray/api/Ray.java +++ b/java/api/src/main/java/org/ray/api/Ray.java @@ -1,11 +1,10 @@ package org.ray.api; import java.util.List; - -import org.ray.api.gcs.GcsClient; import org.ray.api.id.UniqueId; import org.ray.api.runtime.RayRuntime; import org.ray.api.runtime.RayRuntimeFactory; +import org.ray.api.runtimecontext.RuntimeContext; /** * This class contains all public APIs of Ray. @@ -130,11 +129,4 @@ public final class Ray extends RayCall { public static RuntimeContext getRuntimeContext() { return runtime.getRuntimeContext(); } - - /** - * Get gcs client. - */ - public static GcsClient getGcsClient() { - return runtime.getGcsClient(); - } } diff --git a/java/api/src/main/java/org/ray/api/gcs/GcsClient.java b/java/api/src/main/java/org/ray/api/gcs/GcsClient.java deleted file mode 100644 index 6f48417b2..000000000 --- a/java/api/src/main/java/org/ray/api/gcs/GcsClient.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ray.api.gcs; - -import java.util.List; - -/** - * The client used to interface with the GCS. - */ -public interface GcsClient { - - /** - * Get all node information in Ray cluster. - */ - List getAllNodeInfo(); - -} diff --git a/java/api/src/main/java/org/ray/api/runtime/RayRuntime.java b/java/api/src/main/java/org/ray/api/runtime/RayRuntime.java index be50349b6..521032316 100644 --- a/java/api/src/main/java/org/ray/api/runtime/RayRuntime.java +++ b/java/api/src/main/java/org/ray/api/runtime/RayRuntime.java @@ -4,13 +4,12 @@ import java.util.List; import org.ray.api.RayActor; import org.ray.api.RayObject; import org.ray.api.RayPyActor; -import org.ray.api.RuntimeContext; import org.ray.api.WaitResult; import org.ray.api.function.RayFunc; -import org.ray.api.gcs.GcsClient; import org.ray.api.id.UniqueId; import org.ray.api.options.ActorCreationOptions; import org.ray.api.options.CallOptions; +import org.ray.api.runtimecontext.RuntimeContext; /** * Base interface of a Ray runtime. @@ -132,6 +131,4 @@ public interface RayRuntime { */ RayPyActor createPyActor(String moduleName, String className, Object[] args, ActorCreationOptions options); - - GcsClient getGcsClient(); } diff --git a/java/api/src/main/java/org/ray/api/gcs/NodeInfo.java b/java/api/src/main/java/org/ray/api/runtimecontext/NodeInfo.java similarity index 95% rename from java/api/src/main/java/org/ray/api/gcs/NodeInfo.java rename to java/api/src/main/java/org/ray/api/runtimecontext/NodeInfo.java index 0c98c5be3..12d011fd9 100644 --- a/java/api/src/main/java/org/ray/api/gcs/NodeInfo.java +++ b/java/api/src/main/java/org/ray/api/runtimecontext/NodeInfo.java @@ -1,4 +1,4 @@ -package org.ray.api.gcs; +package org.ray.api.runtimecontext; import java.util.Map; import org.ray.api.id.UniqueId; diff --git a/java/api/src/main/java/org/ray/api/RuntimeContext.java b/java/api/src/main/java/org/ray/api/runtimecontext/RuntimeContext.java similarity index 86% rename from java/api/src/main/java/org/ray/api/RuntimeContext.java rename to java/api/src/main/java/org/ray/api/runtimecontext/RuntimeContext.java index 45c17f36b..c4f78c380 100644 --- a/java/api/src/main/java/org/ray/api/RuntimeContext.java +++ b/java/api/src/main/java/org/ray/api/runtimecontext/RuntimeContext.java @@ -1,5 +1,6 @@ -package org.ray.api; +package org.ray.api.runtimecontext; +import java.util.List; import org.ray.api.id.UniqueId; /** @@ -43,4 +44,9 @@ public interface RuntimeContext { * Return true if Ray is running in single-process mode, false if Ray is running in cluster mode. */ boolean isSingleProcess(); + + /** + * Get all node information in Ray cluster. + */ + List getAllNodeInfo(); } diff --git a/java/runtime/src/main/java/org/ray/runtime/AbstractRayRuntime.java b/java/runtime/src/main/java/org/ray/runtime/AbstractRayRuntime.java index 0cd6ee4f6..af8cff9d7 100644 --- a/java/runtime/src/main/java/org/ray/runtime/AbstractRayRuntime.java +++ b/java/runtime/src/main/java/org/ray/runtime/AbstractRayRuntime.java @@ -12,20 +12,20 @@ import java.util.stream.Collectors; import org.ray.api.RayActor; import org.ray.api.RayObject; import org.ray.api.RayPyActor; -import org.ray.api.RuntimeContext; import org.ray.api.WaitResult; import org.ray.api.exception.RayException; import org.ray.api.function.RayFunc; -import org.ray.api.gcs.GcsClient; import org.ray.api.id.UniqueId; import org.ray.api.options.ActorCreationOptions; import org.ray.api.options.BaseTaskOptions; import org.ray.api.options.CallOptions; import org.ray.api.runtime.RayRuntime; +import org.ray.api.runtimecontext.RuntimeContext; import org.ray.runtime.config.RayConfig; import org.ray.runtime.functionmanager.FunctionDescriptor; import org.ray.runtime.functionmanager.FunctionManager; import org.ray.runtime.functionmanager.PyFunctionDescriptor; +import org.ray.runtime.gcs.GcsClient; import org.ray.runtime.objectstore.ObjectStoreProxy; import org.ray.runtime.objectstore.ObjectStoreProxy.GetResult; import org.ray.runtime.raylet.RayletClient; @@ -318,11 +318,6 @@ public abstract class AbstractRayRuntime implements RayRuntime { return actor; } - @Override - public GcsClient getGcsClient() { - return gcsClient; - } - /** * Create the task specification. * @@ -423,4 +418,7 @@ public abstract class AbstractRayRuntime implements RayRuntime { return runtimeContext; } + public GcsClient getGcsClient() { + return gcsClient; + } } diff --git a/java/runtime/src/main/java/org/ray/runtime/RayNativeRuntime.java b/java/runtime/src/main/java/org/ray/runtime/RayNativeRuntime.java index d1845638a..f86983809 100644 --- a/java/runtime/src/main/java/org/ray/runtime/RayNativeRuntime.java +++ b/java/runtime/src/main/java/org/ray/runtime/RayNativeRuntime.java @@ -13,7 +13,7 @@ import java.util.HashMap; import java.util.Map; import org.ray.runtime.config.RayConfig; import org.ray.runtime.config.WorkerMode; -import org.ray.runtime.gcs.GcsClientImpl; +import org.ray.runtime.gcs.GcsClient; import org.ray.runtime.gcs.RedisClient; import org.ray.runtime.objectstore.ObjectStoreProxy; import org.ray.runtime.raylet.RayletClientImpl; @@ -92,7 +92,7 @@ public final class RayNativeRuntime extends AbstractRayRuntime { manager.startRayProcesses(true); } - gcsClient = new GcsClientImpl(rayConfig.getRedisAddress(), rayConfig.redisPassword); + gcsClient = new GcsClient(rayConfig.getRedisAddress(), rayConfig.redisPassword); // TODO(qwang): Get object_store_socket_name and raylet_socket_name from Redis. objectStoreProxy = new ObjectStoreProxy(this, rayConfig.objectStoreSocketName); diff --git a/java/runtime/src/main/java/org/ray/runtime/RuntimeContextImpl.java b/java/runtime/src/main/java/org/ray/runtime/RuntimeContextImpl.java index 30f668a8c..937f13773 100644 --- a/java/runtime/src/main/java/org/ray/runtime/RuntimeContextImpl.java +++ b/java/runtime/src/main/java/org/ray/runtime/RuntimeContextImpl.java @@ -1,11 +1,11 @@ package org.ray.runtime; import com.google.common.base.Preconditions; -import org.ray.api.Ray; -import org.ray.api.RuntimeContext; +import java.util.List; import org.ray.api.id.UniqueId; +import org.ray.api.runtimecontext.NodeInfo; +import org.ray.api.runtimecontext.RuntimeContext; import org.ray.runtime.config.RunMode; -import org.ray.runtime.gcs.GcsClientImpl; import org.ray.runtime.task.TaskSpec; public class RuntimeContextImpl implements RuntimeContext { @@ -38,7 +38,7 @@ public class RuntimeContextImpl implements RuntimeContext { return false; } - return ((GcsClientImpl) Ray.getGcsClient()).actorExists(getCurrentActorId()); + return runtime.getGcsClient().actorExists(getCurrentActorId()); } @Override @@ -56,4 +56,8 @@ public class RuntimeContextImpl implements RuntimeContext { return RunMode.SINGLE_PROCESS == runtime.getRayConfig().runMode; } + @Override + public List getAllNodeInfo() { + return runtime.getGcsClient().getAllNodeInfo(); + } } diff --git a/java/runtime/src/main/java/org/ray/runtime/Worker.java b/java/runtime/src/main/java/org/ray/runtime/Worker.java index 7cbf4d77d..813a62fdc 100644 --- a/java/runtime/src/main/java/org/ray/runtime/Worker.java +++ b/java/runtime/src/main/java/org/ray/runtime/Worker.java @@ -10,7 +10,6 @@ import org.ray.api.exception.RayTaskException; import org.ray.api.id.UniqueId; import org.ray.runtime.config.RunMode; import org.ray.runtime.functionmanager.RayFunction; -import org.ray.runtime.gcs.GcsClientImpl; import org.ray.runtime.task.ArgumentsBuilder; import org.ray.runtime.task.TaskSpec; import org.slf4j.Logger; @@ -173,7 +172,7 @@ public class Worker { lastCheckpointTimestamp = System.currentTimeMillis(); checkpointIds = new ArrayList<>(); List availableCheckpoints - = ((GcsClientImpl)runtime.getGcsClient()).getCheckpointsForActor(actorId); + = runtime.getGcsClient().getCheckpointsForActor(actorId); if (availableCheckpoints.isEmpty()) { return; } diff --git a/java/runtime/src/main/java/org/ray/runtime/gcs/GcsClientImpl.java b/java/runtime/src/main/java/org/ray/runtime/gcs/GcsClient.java similarity index 95% rename from java/runtime/src/main/java/org/ray/runtime/gcs/GcsClientImpl.java rename to java/runtime/src/main/java/org/ray/runtime/gcs/GcsClient.java index 34f11dc5c..a627f200a 100644 --- a/java/runtime/src/main/java/org/ray/runtime/gcs/GcsClientImpl.java +++ b/java/runtime/src/main/java/org/ray/runtime/gcs/GcsClient.java @@ -9,9 +9,8 @@ import java.util.Map; import java.util.stream.Collectors; import org.apache.commons.lang3.ArrayUtils; import org.ray.api.Checkpointable.Checkpoint; -import org.ray.api.gcs.GcsClient; -import org.ray.api.gcs.NodeInfo; import org.ray.api.id.UniqueId; +import org.ray.api.runtimecontext.NodeInfo; import org.ray.runtime.generated.ActorCheckpointIdData; import org.ray.runtime.generated.ClientTableData; import org.ray.runtime.generated.TablePrefix; @@ -22,15 +21,15 @@ import org.slf4j.LoggerFactory; /** * An implementation of GcsClient. */ -public class GcsClientImpl implements GcsClient { +public class GcsClient { - private static Logger LOGGER = LoggerFactory.getLogger(GcsClientImpl.class); + private static Logger LOGGER = LoggerFactory.getLogger(GcsClient.class); private RedisClient primary; private List shards; - public GcsClientImpl(String redisAddress, String redisPassword) { + public GcsClient(String redisAddress, String redisPassword) { primary = new RedisClient(redisAddress, redisPassword); int numShards = 0; try { @@ -48,7 +47,6 @@ public class GcsClientImpl implements GcsClient { }).collect(Collectors.toList()); } - @Override public List getAllNodeInfo() { final String prefix = TablePrefix.name(TablePrefix.CLIENT); final byte[] key = ArrayUtils.addAll(prefix.getBytes(), UniqueId.NIL.getBytes()); diff --git a/java/test/src/main/java/org/ray/api/benchmark/MicroBenchmarks.java b/java/test/src/main/java/org/ray/api/benchmark/MicroBenchmarks.java index 8a6d90562..7e94f4453 100644 --- a/java/test/src/main/java/org/ray/api/benchmark/MicroBenchmarks.java +++ b/java/test/src/main/java/org/ray/api/benchmark/MicroBenchmarks.java @@ -20,7 +20,8 @@ public class MicroBenchmarks { } final long duration = System.nanoTime() - start; LOGGER.info( - "Benchmark \"{}\" finished, repeated {} times, total duration {} ms, average duration {} ns.", + "Benchmark \"{}\" finished, repeated {} times, total duration {} ms," + + " average duration {} ns.", name, numRepeats, duration / 1_000_000, duration / numRepeats); } diff --git a/java/test/src/main/java/org/ray/api/test/GcsClientTest.java b/java/test/src/main/java/org/ray/api/test/GcsClientTest.java index 0b2ce43e4..5fa9e60f0 100644 --- a/java/test/src/main/java/org/ray/api/test/GcsClientTest.java +++ b/java/test/src/main/java/org/ray/api/test/GcsClientTest.java @@ -4,10 +4,10 @@ import com.google.common.base.Preconditions; import java.util.List; import org.ray.api.Ray; import org.ray.api.TestUtils; -import org.ray.api.gcs.GcsClient; -import org.ray.api.gcs.NodeInfo; +import org.ray.api.runtimecontext.NodeInfo; import org.ray.runtime.AbstractRayRuntime; import org.ray.runtime.config.RayConfig; +import org.ray.runtime.gcs.GcsClient; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; @@ -31,7 +31,7 @@ public class GcsClientTest extends BaseTest { RayConfig config = ((AbstractRayRuntime)Ray.internal()).getRayConfig(); Preconditions.checkNotNull(config); - GcsClient gcsClient = Ray.getGcsClient(); + GcsClient gcsClient = ((AbstractRayRuntime)Ray.internal()).getGcsClient(); List allNodeInfo = gcsClient.getAllNodeInfo(); Assert.assertEquals(allNodeInfo.size(), 1); Assert.assertEquals(allNodeInfo.get(0).nodeAddress, config.nodeIp); diff --git a/java/test/src/main/java/org/ray/api/test/PlasmaFreeTest.java b/java/test/src/main/java/org/ray/api/test/PlasmaFreeTest.java index 9b122eafe..1e344e502 100644 --- a/java/test/src/main/java/org/ray/api/test/PlasmaFreeTest.java +++ b/java/test/src/main/java/org/ray/api/test/PlasmaFreeTest.java @@ -6,7 +6,6 @@ import org.ray.api.RayObject; import org.ray.api.TestUtils; import org.ray.api.annotation.RayRemote; import org.ray.runtime.AbstractRayRuntime; -import org.ray.runtime.gcs.GcsClientImpl; import org.ray.runtime.util.UniqueIdUtil; import org.testng.Assert; import org.testng.annotations.Test; @@ -37,7 +36,8 @@ public class PlasmaFreeTest extends BaseTest { Assert.assertEquals("hello", helloId.get()); Ray.internal().free(ImmutableList.of(helloId.getId()), true, true); - final boolean result = TestUtils.waitForCondition(() -> !((GcsClientImpl) Ray.getGcsClient()) + final boolean result = TestUtils.waitForCondition( + () -> !(((AbstractRayRuntime)Ray.internal()).getGcsClient()) .rayletTaskExistsInGcs(UniqueIdUtil.computeTaskId(helloId.getId())), 50); Assert.assertTrue(result); }