From 356dcbbf2e93beccc2e592df9ef88c1c215d5622 Mon Sep 17 00:00:00 2001 From: dayshah Date: Sat, 22 Nov 2025 10:30:59 -0800 Subject: [PATCH 1/3] [core] Fix flaky recursive cancel test Signed-off-by: dayshah --- python/ray/tests/test_cancel.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/python/ray/tests/test_cancel.py b/python/ray/tests/test_cancel.py index 54c27641247c..f5a947aae329 100644 --- a/python/ray/tests/test_cancel.py +++ b/python/ray/tests/test_cancel.py @@ -467,8 +467,7 @@ def inner(): @ray.remote(num_cpus=1) def outer(): - x = [inner.remote()] - print(x) + _ = inner.remote() while True: time.sleep(0.1) @@ -480,11 +479,11 @@ def many_resources(): many_fut = many_resources.remote() with pytest.raises(GetTimeoutError): ray.get(many_fut, timeout=1) - ray.cancel(outer_fut) + ray.cancel(outer_fut, force=use_force) with pytest.raises(valid_exceptions(use_force)): ray.get(outer_fut, timeout=10) - assert ray.get(many_fut, timeout=30) + assert ray.get(many_fut, timeout=30) == 300 def test_recursive_cancel_actor_task(shutdown_only): From a68b32d187be48ab0cf3dedf5afb60c8f4d45af6 Mon Sep 17 00:00:00 2001 From: dayshah Date: Sat, 22 Nov 2025 10:31:37 -0800 Subject: [PATCH 2/3] up Signed-off-by: dayshah --- python/ray/tests/test_cancel.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/python/ray/tests/test_cancel.py b/python/ray/tests/test_cancel.py index f5a947aae329..f13908ba4e6e 100644 --- a/python/ray/tests/test_cancel.py +++ b/python/ray/tests/test_cancel.py @@ -458,7 +458,7 @@ def remote_wait(sg): @pytest.mark.parametrize("use_force", [True, False]) def test_recursive_cancel(shutdown_only, use_force): - ray.init(num_cpus=4) + ray.init(num_cpus=2) @ray.remote(num_cpus=1) def inner(): @@ -471,9 +471,9 @@ def outer(): while True: time.sleep(0.1) - @ray.remote(num_cpus=4) + @ray.remote(num_cpus=2) def many_resources(): - return 300 + return True outer_fut = outer.remote() many_fut = many_resources.remote() @@ -483,7 +483,7 @@ def many_resources(): with pytest.raises(valid_exceptions(use_force)): ray.get(outer_fut, timeout=10) - assert ray.get(many_fut, timeout=30) == 300 + assert ray.get(many_fut, timeout=30) def test_recursive_cancel_actor_task(shutdown_only): From 4ae0e01ef0fb39e6f984b56ee03d0beaa023e253 Mon Sep 17 00:00:00 2001 From: dayshah Date: Sat, 22 Nov 2025 12:36:10 -0800 Subject: [PATCH 3/3] more deterministic Signed-off-by: dayshah --- python/ray/tests/test_cancel.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/python/ray/tests/test_cancel.py b/python/ray/tests/test_cancel.py index f13908ba4e6e..aac197ec5722 100644 --- a/python/ray/tests/test_cancel.py +++ b/python/ray/tests/test_cancel.py @@ -461,13 +461,14 @@ def test_recursive_cancel(shutdown_only, use_force): ray.init(num_cpus=2) @ray.remote(num_cpus=1) - def inner(): + def inner(signal_actor): + signal_actor.send.remote() while True: time.sleep(0.1) @ray.remote(num_cpus=1) - def outer(): - _ = inner.remote() + def outer(signal_actor): + _ = inner.remote(signal_actor) while True: time.sleep(0.1) @@ -475,7 +476,10 @@ def outer(): def many_resources(): return True - outer_fut = outer.remote() + signal_actor = SignalActor.remote() + outer_fut = outer.remote(signal_actor) + # Wait until both inner and outer are running + ray.get(signal_actor.wait.remote()) many_fut = many_resources.remote() with pytest.raises(GetTimeoutError): ray.get(many_fut, timeout=1)