Skip to content

[Core] Add fallback_strategy API to Task/Actor remote options#56374

Merged
edoakes merged 14 commits intoray-project:masterfrom
ryanaoleary:python-api-fallback-strategy
Oct 7, 2025
Merged

[Core] Add fallback_strategy API to Task/Actor remote options#56374
edoakes merged 14 commits intoray-project:masterfrom
ryanaoleary:python-api-fallback-strategy

Conversation

@ryanaoleary
Copy link
Copy Markdown
Contributor

@ryanaoleary ryanaoleary commented Sep 9, 2025

Why are these changes needed?

This PR contains only the python changes from #56369, adding fallback_strategy as an option to the remote decorator of Tasks/Actors. Fallback strategy consists of a list of dict of decorator options. The dict of decorator options are evaluated together, and the first satisfied strategy dict is scheduled. With this PR, the only supported option is label_selector.

Example using fallback_strategy to schedule on different instance types:

@ray.remote(
    label_selector={"instance_type": "m5.16xlarge"},
    fallback_strategy=[
        # Fall back to selector for a "m5.large" instance type if "m5.16xlarge"
        # cannot be satisfied.
        {"label_selector": {"instance_type": "m5.large"}},
        # Finally, fall back to an empty set of labels (no constraints).
        # neither desired m5 type can be sastisfied.
        {"label_selector": {}},
    ],
)
class A:
    pass

In the above field, first the label_selector field will be tried. Then, the scheduler will iterate through each dict in fallback_strategy and attempt to scheduling using the label selector specified there (first {"instance_type": "m5.large"} and then the empty set). The first satisfied label_selector will be scheduled.

Related issue number

#51564

Checks

  • I've signed off every commit(by using the -s flag, i.e., git commit -s) in this PR.
  • I've run scripts/format.sh to lint the changes in this PR.
  • I've included any doc changes needed for https://docs.ray.io/en/master/.
    • I've added any new APIs to the API Reference. For example, if I added a
      method in Tune, I've added it in doc/source/tune/api/ under the
      corresponding .rst file.
  • I've made sure the tests are passing. Note that there might be a few flaky tests, see the recent failures at https://flakey-tests.ray.io/
  • Testing Strategy
    • Unit tests
    • Release tests
    • This PR is not tested :(

Note

Introduces experimental fallback_strategy (list of label selectors) for task/actor scheduling, with validation and unit tests.

  • Core:
    • Options/Validation: Add fallback_strategy to _common_options in python/ray/_common/ray_option_utils.py; implement validate_fallback_strategy in python/ray/_private/label_utils.py.
    • Scheduling API: Extend ray.remote overload and docstrings in python/ray/_private/worker.py, python/ray/actor.py, and python/ray/remote_function.py to accept and propagate fallback_strategy alongside label_selector.
  • Tests:
    • Add test_decorator_fallback_strategy_args in python/ray/tests/test_actor.py and test_validate_fallback_strategy in python/ray/tests/test_label_utils.py.
  • CI:
    • Update ci/lint/pydoclint-baseline.txt for new/changed docstrings.

Written by Cursor Bugbot for commit 9ef798c. This will update automatically on new commits. Configure here.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a fallback_strategy API to the remote options for Tasks and Actors, enhancing scheduling flexibility. The implementation is well-structured, adding validation logic and comprehensive tests for the new feature. My review focuses on improving documentation consistency and correcting a minor inaccuracy in a test comment to ensure clarity and maintainability.

@ray-gardener ray-gardener bot added docs An issue or change related to documentation core Issues that should be addressed in Ray Core community-contribution Contributed by the community labels Sep 9, 2025
Copy link
Copy Markdown
Contributor

@MengjinYan MengjinYan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good!

@MengjinYan MengjinYan added the go add ONLY when ready to merge, run all tests label Sep 16, 2025
@MengjinYan
Copy link
Copy Markdown
Contributor

MengjinYan commented Sep 16, 2025

There seems to be lint failure. The java test failure should be unrelated. cc: @ryanaoleary

@ryanaoleary
Copy link
Copy Markdown
Contributor Author

There seems to be lint failure. The java test failure should be unrelated. cc: @ryanaoleary

There were some pydoc lint failures, should be fixed with d377805

cursor[bot]

This comment was marked as outdated.

cursor[bot]

This comment was marked as outdated.

@ryanaoleary ryanaoleary force-pushed the python-api-fallback-strategy branch 2 times, most recently from daed44c to fe58310 Compare September 25, 2025 23:18
@edoakes edoakes removed the community-contribution Contributed by the community label Sep 26, 2025
@edoakes
Copy link
Copy Markdown
Collaborator

edoakes commented Sep 26, 2025

Test failures @ryanaoleary

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>

Update python/ray/actor.py

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Signed-off-by: Ryan O'Leary <113500783+ryanaoleary@users.noreply.github.com>

Update python/ray/actor.py

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Signed-off-by: Ryan O'Leary <113500783+ryanaoleary@users.noreply.github.com>

Update python/ray/tests/test_label_scheduling.py

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Signed-off-by: Ryan O'Leary <113500783+ryanaoleary@users.noreply.github.com>

Update python/ray/_private/worker.py

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Signed-off-by: Ryan O'Leary <113500783+ryanaoleary@users.noreply.github.com>

Add remaining changes

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>

Remove arg in create_actor

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>

Update python/ray/actor.py

Co-authored-by: Mengjin Yan <mengjinyan3@gmail.com>
Signed-off-by: Ryan O'Leary <113500783+ryanaoleary@users.noreply.github.com>

Update python/ray/actor.py

Co-authored-by: Mengjin Yan <mengjinyan3@gmail.com>
Signed-off-by: Ryan O'Leary <113500783+ryanaoleary@users.noreply.github.com>

Update python/ray/_private/worker.py

Co-authored-by: Mengjin Yan <mengjinyan3@gmail.com>
Signed-off-by: Ryan O'Leary <113500783+ryanaoleary@users.noreply.github.com>

fix lint and pydoc

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>

Undo pydoclint change

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>

Update pydoc baseline

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>

Fix label util function

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>

Fix test and lint

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>

Fix remote function pydoc

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>
Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>

Undo pydoc lint baseline changes

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>

Fix baseline

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>

Fix pydoc lint errors

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>

Re-run linters and regenerate baseline

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>
@ryanaoleary ryanaoleary force-pushed the python-api-fallback-strategy branch from fe58310 to 4f943a3 Compare September 26, 2025 21:05
@ryanaoleary
Copy link
Copy Markdown
Contributor Author

@MengjinYan I think this PR is ready to merge since CI is now passing.

@edoakes
Copy link
Copy Markdown
Collaborator

edoakes commented Oct 3, 2025

@MengjinYan @ryanaoleary from the REP, fallback strategy should be a list of dicts of decorator options that are overridden in tandem. To start with, it would only support label_selector as a key within those dicts. Here, it is accepting only the label selector as the dictionary directly.

@ryanaoleary
Copy link
Copy Markdown
Contributor Author

ryanaoleary commented Oct 4, 2025

@MengjinYan @ryanaoleary from the REP, fallback strategy should be a list of dicts of decorator options that are overridden in tandem. To start with, it would only support label_selector as a key within those dicts. Here, it is accepting only the label selector as the dictionary directly.

@edoakes Sorry I must have misread it when I was implementing it, so rather than a fallback_strategy like this:

fallback_strategy=[
         {"ray.io/label-selector-1": "value1"}, 
         {"ray.io/label-selector-2": "value2"}, 
},

where it's just a list of label selectors that we iterate through to try, it should be formatted like this:

fallback_strategy=[
       {"label_selector": {"ray.io/label-selector-1": "value1"}, .... <some-other-fields-in-the-future>},
       {"label_selector": {"ray.io/label-selector-2": "value2"}},
   ],

If the above looks correct I'll fix this PR to follow that format asap.

@edoakes
Copy link
Copy Markdown
Collaborator

edoakes commented Oct 4, 2025

@ryanaoleary yes that's right. And the reason for this is to open the door to supporting coordinated fallback with other overrides (like resources) in the future.

@ryanaoleary
Copy link
Copy Markdown
Contributor Author

@ryanaoleary yes that's right. And the reason for this is to open the door to supporting coordinated fallback with other overrides (like resources) in the future.

Sounds good, should be fixed with 9cca330.

cursor[bot]

This comment was marked as outdated.

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>
cursor[bot]

This comment was marked as outdated.

ryanaoleary and others added 2 commits October 6, 2025 12:20
cursor[bot]

This comment was marked as outdated.

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>
@jjyao
Copy link
Copy Markdown
Contributor

jjyao commented Oct 6, 2025

@ryanaoleary could you update the RP description with a few examples of how fallback_strategy should be used?

@ryanaoleary
Copy link
Copy Markdown
Contributor Author

@ryanaoleary could you update the RP description with a few examples of how fallback_strategy should be used?

Sounds good, updated the PR description with an example and explanation.

@ryanaoleary
Copy link
Copy Markdown
Contributor Author

The failing CI test appears unrelated and passes when I run it locally with this PR:

python -m pytest -v -s test_sql.py::test_databricks_u
c_datasource_empty_result
/usr/local/google/home/ryanaoleary/miniconda3/envs/myenv/lib/python3.11/site-packages/paramiko/pkey.py:82: CryptographyDeprecationWarning: TripleDES has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.
  "cipher": algorithms.TripleDES,
/usr/local/google/home/ryanaoleary/miniconda3/envs/myenv/lib/python3.11/site-packages/paramiko/transport.py:253: CryptographyDeprecationWarning: TripleDES has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.
  "class": algorithms.TripleDES,
Test session starts (platform: linux, Python 3.11.13, pytest 7.4.4, pytest-sugar 0.9.5)
cachedir: .pytest_cache
rootdir: /usr/local/google/home/ryanaoleary/Desktop/forks/ray
configfile: pytest.ini
plugins: sphinx-0.5.1.dev0, rerunfailures-11.1.2, mock-3.14.0, virtualenv-1.8.1, pytest_httpserver-1.1.3, lazy-fixtures-1.1.2, shutil-1.8.1, docker-tools-3.1.3, timeout-2.1.0, anyio-3.7.1, sugar-0.9.5, forked-1.4.0, aiohttp-1.1.0, asyncio-0.17.2
timeout: 180.0s
timeout method: signal
timeout func_only: False
asyncio: mode=Mode.AUTO
collecting ... 2025-10-07 02:56:59,604  INFO worker.py:2004 -- Started a local Ray instance. View the dashboard at http://127.0.0.1:8265 
2025-10-07 02:57:00,607 INFO databricks_uc_datasource.py:72 -- Waiting for query 'select * from dummy_table' execution result.

 python/ray/data/tests/test_sql.py::test_databricks_uc_datasource_empty_result ✓                                  100% ██████████

Results (5.20s):
       1 passed

@edoakes
Copy link
Copy Markdown
Collaborator

edoakes commented Oct 7, 2025

merged master to re-run CI, enabling auto-merge

@edoakes edoakes enabled auto-merge (squash) October 7, 2025 16:12
@edoakes edoakes merged commit 9b0dc60 into ray-project:master Oct 7, 2025
7 checks passed
liulehui pushed a commit to liulehui/ray that referenced this pull request Oct 9, 2025
…project#56374)

This PR contains only the python changes from
ray-project#56369, adding
`fallback_strategy` as an option to the remote decorator of
Tasks/Actors. Fallback strategy consists of a list of dict of decorator
options. The dict of decorator options are evaluated together, and the
first satisfied strategy dict is scheduled. With this PR, the only
supported option is `label_selector`.

Example using `fallback_strategy` to schedule on different instance
types:
```
@ray.remote(
    label_selector={"instance_type": "m5.16xlarge"},
    fallback_strategy=[
        # Fall back to selector for a "m5.large" instance type if "m5.16xlarge"
        # cannot be satisfied.
        {"label_selector": {"instance_type": "m5.large"}},
        # Finally, fall back to an empty set of labels (no constraints).
        # neither desired m5 type can be sastisfied.
        {"label_selector": {}},
    ],
)
class A:
    pass
```

In the above field, first the `label_selector` field will be tried.
Then, the scheduler will iterate through each dict in
`fallback_strategy` and attempt to scheduling using the label selector
specified there (first `{"instance_type": "m5.large"}` and then the
empty set). The first satisfied `label_selector` will be scheduled.

ray-project#51564

---------

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>
Co-authored-by: Mengjin Yan <mengjinyan3@gmail.com>
Co-authored-by: Edward Oakes <ed.nmi.oakes@gmail.com>
joshkodi pushed a commit to joshkodi/ray that referenced this pull request Oct 13, 2025
…project#56374)

This PR contains only the python changes from
ray-project#56369, adding
`fallback_strategy` as an option to the remote decorator of
Tasks/Actors. Fallback strategy consists of a list of dict of decorator
options. The dict of decorator options are evaluated together, and the
first satisfied strategy dict is scheduled. With this PR, the only
supported option is `label_selector`.

Example using `fallback_strategy` to schedule on different instance
types:
```
@ray.remote(
    label_selector={"instance_type": "m5.16xlarge"},
    fallback_strategy=[
        # Fall back to selector for a "m5.large" instance type if "m5.16xlarge"
        # cannot be satisfied.
        {"label_selector": {"instance_type": "m5.large"}},
        # Finally, fall back to an empty set of labels (no constraints).
        # neither desired m5 type can be sastisfied.
        {"label_selector": {}},
    ],
)
class A:
    pass
```

In the above field, first the `label_selector` field will be tried.
Then, the scheduler will iterate through each dict in
`fallback_strategy` and attempt to scheduling using the label selector
specified there (first `{"instance_type": "m5.large"}` and then the
empty set). The first satisfied `label_selector` will be scheduled.

ray-project#51564

---------

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>
Co-authored-by: Mengjin Yan <mengjinyan3@gmail.com>
Co-authored-by: Edward Oakes <ed.nmi.oakes@gmail.com>
Signed-off-by: Josh Kodi <joshkodi@gmail.com>
ArturNiederfahrenhorst pushed a commit to ArturNiederfahrenhorst/ray that referenced this pull request Oct 13, 2025
…project#56374)

This PR contains only the python changes from
ray-project#56369, adding
`fallback_strategy` as an option to the remote decorator of
Tasks/Actors. Fallback strategy consists of a list of dict of decorator
options. The dict of decorator options are evaluated together, and the
first satisfied strategy dict is scheduled. With this PR, the only
supported option is `label_selector`.

Example using `fallback_strategy` to schedule on different instance
types:
```
@ray.remote(
    label_selector={"instance_type": "m5.16xlarge"},
    fallback_strategy=[
        # Fall back to selector for a "m5.large" instance type if "m5.16xlarge"
        # cannot be satisfied.
        {"label_selector": {"instance_type": "m5.large"}},
        # Finally, fall back to an empty set of labels (no constraints).
        # neither desired m5 type can be sastisfied.
        {"label_selector": {}},
    ],
)
class A:
    pass
```

In the above field, first the `label_selector` field will be tried.
Then, the scheduler will iterate through each dict in
`fallback_strategy` and attempt to scheduling using the label selector
specified there (first `{"instance_type": "m5.large"}` and then the
empty set). The first satisfied `label_selector` will be scheduled.

ray-project#51564

---------

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>
Co-authored-by: Mengjin Yan <mengjinyan3@gmail.com>
Co-authored-by: Edward Oakes <ed.nmi.oakes@gmail.com>
justinyeh1995 pushed a commit to justinyeh1995/ray that referenced this pull request Oct 20, 2025
…project#56374)

This PR contains only the python changes from
ray-project#56369, adding
`fallback_strategy` as an option to the remote decorator of
Tasks/Actors. Fallback strategy consists of a list of dict of decorator
options. The dict of decorator options are evaluated together, and the
first satisfied strategy dict is scheduled. With this PR, the only
supported option is `label_selector`.

Example using `fallback_strategy` to schedule on different instance
types:
```
@ray.remote(
    label_selector={"instance_type": "m5.16xlarge"},
    fallback_strategy=[
        # Fall back to selector for a "m5.large" instance type if "m5.16xlarge"
        # cannot be satisfied.
        {"label_selector": {"instance_type": "m5.large"}},
        # Finally, fall back to an empty set of labels (no constraints).
        # neither desired m5 type can be sastisfied.
        {"label_selector": {}},
    ],
)
class A:
    pass
```

In the above field, first the `label_selector` field will be tried.
Then, the scheduler will iterate through each dict in
`fallback_strategy` and attempt to scheduling using the label selector
specified there (first `{"instance_type": "m5.large"}` and then the
empty set). The first satisfied `label_selector` will be scheduled.

ray-project#51564

---------

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>
Co-authored-by: Mengjin Yan <mengjinyan3@gmail.com>
Co-authored-by: Edward Oakes <ed.nmi.oakes@gmail.com>
xinyuangui2 pushed a commit to xinyuangui2/ray that referenced this pull request Oct 22, 2025
…project#56374)

This PR contains only the python changes from
ray-project#56369, adding
`fallback_strategy` as an option to the remote decorator of
Tasks/Actors. Fallback strategy consists of a list of dict of decorator
options. The dict of decorator options are evaluated together, and the
first satisfied strategy dict is scheduled. With this PR, the only
supported option is `label_selector`.

Example using `fallback_strategy` to schedule on different instance
types:
```
@ray.remote(
    label_selector={"instance_type": "m5.16xlarge"},
    fallback_strategy=[
        # Fall back to selector for a "m5.large" instance type if "m5.16xlarge"
        # cannot be satisfied.
        {"label_selector": {"instance_type": "m5.large"}},
        # Finally, fall back to an empty set of labels (no constraints).
        # neither desired m5 type can be sastisfied.
        {"label_selector": {}},
    ],
)
class A:
    pass
```

In the above field, first the `label_selector` field will be tried.
Then, the scheduler will iterate through each dict in
`fallback_strategy` and attempt to scheduling using the label selector
specified there (first `{"instance_type": "m5.large"}` and then the
empty set). The first satisfied `label_selector` will be scheduled.

ray-project#51564

---------

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>
Co-authored-by: Mengjin Yan <mengjinyan3@gmail.com>
Co-authored-by: Edward Oakes <ed.nmi.oakes@gmail.com>
Signed-off-by: xgui <xgui@anyscale.com>
landscapepainter pushed a commit to landscapepainter/ray that referenced this pull request Nov 17, 2025
…project#56374)

This PR contains only the python changes from
ray-project#56369, adding
`fallback_strategy` as an option to the remote decorator of
Tasks/Actors. Fallback strategy consists of a list of dict of decorator
options. The dict of decorator options are evaluated together, and the
first satisfied strategy dict is scheduled. With this PR, the only
supported option is `label_selector`.

Example using `fallback_strategy` to schedule on different instance
types:
```
@ray.remote(
    label_selector={"instance_type": "m5.16xlarge"},
    fallback_strategy=[
        # Fall back to selector for a "m5.large" instance type if "m5.16xlarge"
        # cannot be satisfied.
        {"label_selector": {"instance_type": "m5.large"}},
        # Finally, fall back to an empty set of labels (no constraints).
        # neither desired m5 type can be sastisfied.
        {"label_selector": {}},
    ],
)
class A:
    pass
```

In the above field, first the `label_selector` field will be tried.
Then, the scheduler will iterate through each dict in
`fallback_strategy` and attempt to scheduling using the label selector
specified there (first `{"instance_type": "m5.large"}` and then the
empty set). The first satisfied `label_selector` will be scheduled.

ray-project#51564

---------

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>
Co-authored-by: Mengjin Yan <mengjinyan3@gmail.com>
Co-authored-by: Edward Oakes <ed.nmi.oakes@gmail.com>
Aydin-ab pushed a commit to Aydin-ab/ray-aydin that referenced this pull request Nov 19, 2025
…project#56374)

This PR contains only the python changes from
ray-project#56369, adding
`fallback_strategy` as an option to the remote decorator of
Tasks/Actors. Fallback strategy consists of a list of dict of decorator
options. The dict of decorator options are evaluated together, and the
first satisfied strategy dict is scheduled. With this PR, the only
supported option is `label_selector`.

Example using `fallback_strategy` to schedule on different instance
types:
```
@ray.remote(
    label_selector={"instance_type": "m5.16xlarge"},
    fallback_strategy=[
        # Fall back to selector for a "m5.large" instance type if "m5.16xlarge"
        # cannot be satisfied.
        {"label_selector": {"instance_type": "m5.large"}},
        # Finally, fall back to an empty set of labels (no constraints).
        # neither desired m5 type can be sastisfied.
        {"label_selector": {}},
    ],
)
class A:
    pass
```

In the above field, first the `label_selector` field will be tried.
Then, the scheduler will iterate through each dict in
`fallback_strategy` and attempt to scheduling using the label selector
specified there (first `{"instance_type": "m5.large"}` and then the
empty set). The first satisfied `label_selector` will be scheduled.

ray-project#51564

---------

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>
Co-authored-by: Mengjin Yan <mengjinyan3@gmail.com>
Co-authored-by: Edward Oakes <ed.nmi.oakes@gmail.com>
Signed-off-by: Aydin Abiar <aydin@anyscale.com>
Future-Outlier pushed a commit to Future-Outlier/ray that referenced this pull request Dec 7, 2025
…project#56374)

This PR contains only the python changes from
ray-project#56369, adding
`fallback_strategy` as an option to the remote decorator of
Tasks/Actors. Fallback strategy consists of a list of dict of decorator
options. The dict of decorator options are evaluated together, and the
first satisfied strategy dict is scheduled. With this PR, the only
supported option is `label_selector`.

Example using `fallback_strategy` to schedule on different instance
types:
```
@ray.remote(
    label_selector={"instance_type": "m5.16xlarge"},
    fallback_strategy=[
        # Fall back to selector for a "m5.large" instance type if "m5.16xlarge"
        # cannot be satisfied.
        {"label_selector": {"instance_type": "m5.large"}},
        # Finally, fall back to an empty set of labels (no constraints).
        # neither desired m5 type can be sastisfied.
        {"label_selector": {}},
    ],
)
class A:
    pass
```

In the above field, first the `label_selector` field will be tried.
Then, the scheduler will iterate through each dict in
`fallback_strategy` and attempt to scheduling using the label selector
specified there (first `{"instance_type": "m5.large"}` and then the
empty set). The first satisfied `label_selector` will be scheduled.

ray-project#51564

---------

Signed-off-by: Ryan O'Leary <ryanaoleary@google.com>
Co-authored-by: Mengjin Yan <mengjinyan3@gmail.com>
Co-authored-by: Edward Oakes <ed.nmi.oakes@gmail.com>
Signed-off-by: Future-Outlier <eric901201@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

core Issues that should be addressed in Ray Core docs An issue or change related to documentation go add ONLY when ready to merge, run all tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants