From dd97f0c30d838be33ba0e1082d92b64e923820f2 Mon Sep 17 00:00:00 2001 From: fangfengbin <869218239a@zju.edu.cn> Date: Mon, 28 Sep 2020 17:53:08 +0800 Subject: [PATCH] [Java]Fix testSetResource bug (#11064) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 灵洵 --- .../main/java/io/ray/test/DynamicResourceTest.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/java/test/src/main/java/io/ray/test/DynamicResourceTest.java b/java/test/src/main/java/io/ray/test/DynamicResourceTest.java index 7b65e941e..a103d6943 100644 --- a/java/test/src/main/java/io/ray/test/DynamicResourceTest.java +++ b/java/test/src/main/java/io/ray/test/DynamicResourceTest.java @@ -20,19 +20,23 @@ public class DynamicResourceTest extends BaseTest { // Call a task in advance to warm up the cluster to avoid being too slow to start workers. TestUtils.warmUpCluster(); + String resourceName = "A"; ObjectRef obj = Ray.task(DynamicResourceTest::sayHi) - .setResource("A", 10.0) + .setResource(resourceName, 10.0) .remote(); WaitResult result = Ray.wait(ImmutableList.of(obj), 1, 1000); Assert.assertEquals(result.getReady().size(), 0); - Ray.setResource("A", 10.0); + Ray.setResource(resourceName, 10.0); boolean resourceReady = TestUtils.waitForCondition(() -> { List nodes = Ray.getRuntimeContext().getAllNodeInfo(); - if (nodes.size() != 1) { + // NOTE: GCS updates node resources asynchronously. + // If we directly get the value of "A" for comparison without check whether "A" exists or not, + // it maybe lead to NPE. + if (nodes.size() != 1 || !nodes.get(0).resources.containsKey(resourceName)) { return false; } - return (0 == Double.compare(10.0, nodes.get(0).resources.get("A"))); + return (0 == Double.compare(10.0, nodes.get(0).resources.get(resourceName))); }, 2000); Assert.assertTrue(resourceReady);