diff --git a/java/api/src/main/java/org/ray/api/id/BaseId.java b/java/api/src/main/java/org/ray/api/id/BaseId.java index e08955d5a..c13f0436f 100644 --- a/java/api/src/main/java/org/ray/api/id/BaseId.java +++ b/java/api/src/main/java/org/ray/api/id/BaseId.java @@ -48,7 +48,7 @@ public abstract class BaseId implements Serializable { break; } } - isNilCache = localIsNil; + isNilCache = localIsNil; } return isNilCache; } diff --git a/java/test/src/main/java/org/ray/api/TestUtils.java b/java/test/src/main/java/org/ray/api/TestUtils.java index 9b3bbf233..3636c93e4 100644 --- a/java/test/src/main/java/org/ray/api/TestUtils.java +++ b/java/test/src/main/java/org/ray/api/TestUtils.java @@ -1,8 +1,10 @@ package org.ray.api; import java.util.function.Supplier; +import org.ray.api.annotation.RayRemote; import org.ray.runtime.AbstractRayRuntime; import org.ray.runtime.config.RunMode; +import org.testng.Assert; import org.testng.SkipException; public class TestUtils { @@ -42,4 +44,17 @@ public class TestUtils { } return false; } + + @RayRemote + private static String hi() { + return "hi"; + } + + /** + * Warm up the cluster. + */ + public static void warmUpCluster() { + RayObject obj = Ray.call(TestUtils::hi); + Assert.assertEquals(obj.get(), "hi"); + } } diff --git a/java/test/src/main/java/org/ray/api/test/DynamicResourceTest.java b/java/test/src/main/java/org/ray/api/test/DynamicResourceTest.java index 79b3eba0e..71766c6cf 100644 --- a/java/test/src/main/java/org/ray/api/test/DynamicResourceTest.java +++ b/java/test/src/main/java/org/ray/api/test/DynamicResourceTest.java @@ -23,6 +23,10 @@ public class DynamicResourceTest extends BaseTest { @Test public void testSetResource() { TestUtils.skipTestUnderSingleProcess(); + + // Call a task in advance to warm up the cluster to avoid being too slow to start workers. + TestUtils.warmUpCluster(); + CallOptions op1 = new CallOptions.Builder().setResources(ImmutableMap.of("A", 10.0)).createCallOptions(); RayObject obj = Ray.call(DynamicResourceTest::sayHi, op1); @@ -30,16 +34,21 @@ public class DynamicResourceTest extends BaseTest { Assert.assertEquals(result.getReady().size(), 0); Ray.setResource("A", 10.0); + boolean resourceReady = TestUtils.waitForCondition(() -> { + List nodes = Ray.getRuntimeContext().getAllNodeInfo(); + if (nodes.size() != 1) { + return false; + } + return (0 == Double.compare(10.0, nodes.get(0).resources.get("A"))); + }, 2000); - // Assert node info. - List nodes = Ray.getRuntimeContext().getAllNodeInfo(); - Assert.assertEquals(nodes.size(), 1); - Assert.assertEquals(nodes.get(0).resources.get("A"), 10.0); + Assert.assertTrue(resourceReady); // Assert ray call result. result = Ray.wait(ImmutableList.of(obj), 1, 1000); Assert.assertEquals(result.getReady().size(), 1); Assert.assertEquals(Ray.get(obj.getId()), "hi"); + } } diff --git a/java/test/src/main/java/org/ray/api/test/WaitTest.java b/java/test/src/main/java/org/ray/api/test/WaitTest.java index e82b99d36..bccc50a50 100644 --- a/java/test/src/main/java/org/ray/api/test/WaitTest.java +++ b/java/test/src/main/java/org/ray/api/test/WaitTest.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.List; import org.ray.api.Ray; import org.ray.api.RayObject; +import org.ray.api.TestUtils; import org.ray.api.WaitResult; import org.ray.api.annotation.RayRemote; import org.testng.Assert; @@ -28,6 +29,9 @@ public class WaitTest extends BaseTest { } private static void testWait() { + // Call a task in advance to warm up the cluster to avoid being too slow to start workers. + TestUtils.warmUpCluster(); + RayObject obj1 = Ray.call(WaitTest::hi); RayObject obj2 = Ray.call(WaitTest::delayedHi); @@ -71,4 +75,5 @@ public class WaitTest extends BaseTest { Assert.assertTrue(true); } } + }