mirror of
https://github.com/wassname/ray.git
synced 2026-06-27 19:32:11 +08:00
Support unlimited JVM options (#9910)
This commit is contained in:
@@ -363,7 +363,7 @@ public class RunManager {
|
||||
cmd.addAll(rayConfig.jvmParameters);
|
||||
|
||||
// jvm options
|
||||
cmd.add("RAY_WORKER_DYNAMIC_OPTION_PLACEHOLDER_0");
|
||||
cmd.add("RAY_WORKER_DYNAMIC_OPTION_PLACEHOLDER");
|
||||
|
||||
// Main class
|
||||
cmd.add(WORKER_CLASS);
|
||||
|
||||
@@ -1518,7 +1518,7 @@ def build_java_worker_command(
|
||||
# above options.
|
||||
command += options
|
||||
|
||||
command += ["RAY_WORKER_DYNAMIC_OPTION_PLACEHOLDER_0"]
|
||||
command += ["RAY_WORKER_DYNAMIC_OPTION_PLACEHOLDER"]
|
||||
command += ["io.ray.runtime.runner.worker.DefaultWorker"]
|
||||
|
||||
return command
|
||||
|
||||
@@ -34,8 +34,8 @@ constexpr char kObjectTablePrefix[] = "ObjectTable";
|
||||
/// Prefix for the task table keys in redis.
|
||||
constexpr char kTaskTablePrefix[] = "TaskTable";
|
||||
|
||||
constexpr char kWorkerDynamicOptionPlaceholderPrefix[] =
|
||||
"RAY_WORKER_DYNAMIC_OPTION_PLACEHOLDER_";
|
||||
constexpr char kWorkerDynamicOptionPlaceholder[] =
|
||||
"RAY_WORKER_DYNAMIC_OPTION_PLACEHOLDER";
|
||||
|
||||
constexpr char kWorkerRayletConfigPlaceholder[] = "RAY_WORKER_RAYLET_CONFIG_PLACEHOLDER";
|
||||
|
||||
|
||||
@@ -185,8 +185,7 @@ message ActorCreationTaskSpec {
|
||||
int64 max_actor_restarts = 3;
|
||||
// The dynamic options used in the worker command when starting a worker process for
|
||||
// an actor creation task. If the list isn't empty, the options will be used to replace
|
||||
// the placeholder strings (`RAY_WORKER_DYNAMIC_OPTION_PLACEHOLDER_0`,
|
||||
// `RAY_WORKER_DYNAMIC_OPTION_PLACEHOLDER_1`, etc) in the worker command.
|
||||
// the placeholder string `RAY_WORKER_DYNAMIC_OPTION_PLACEHOLDER` in the worker command.
|
||||
repeated string dynamic_worker_options = 4;
|
||||
// The max number of concurrent calls for direct call actors.
|
||||
int32 max_concurrency = 5;
|
||||
|
||||
@@ -217,19 +217,13 @@ Process WorkerPool::StartWorkerProcess(const Language &language, const JobID &jo
|
||||
|
||||
// Extract pointers from the worker command to pass into execvp.
|
||||
std::vector<std::string> worker_command_args;
|
||||
size_t dynamic_option_index = 0;
|
||||
bool worker_raylet_config_placeholder_found = false;
|
||||
for (auto const &token : state.worker_command) {
|
||||
const auto option_placeholder =
|
||||
kWorkerDynamicOptionPlaceholderPrefix + std::to_string(dynamic_option_index);
|
||||
|
||||
if (token == option_placeholder) {
|
||||
if (!dynamic_options.empty()) {
|
||||
RAY_CHECK(dynamic_option_index < dynamic_options.size());
|
||||
auto options = ParseCommandLine(dynamic_options[dynamic_option_index]);
|
||||
if (token == kWorkerDynamicOptionPlaceholder) {
|
||||
for (const auto &dynamic_option : dynamic_options) {
|
||||
auto options = ParseCommandLine(dynamic_option);
|
||||
worker_command_args.insert(worker_command_args.end(), options.begin(),
|
||||
options.end());
|
||||
++dynamic_option_index;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -352,8 +352,8 @@ TEST_P(WorkerPoolTest, PopWorkersOfMultipleLanguages) {
|
||||
|
||||
TEST_P(WorkerPoolTest, StartWorkerWithDynamicOptionsCommand) {
|
||||
const std::vector<std::string> java_worker_command = {
|
||||
"RAY_WORKER_DYNAMIC_OPTION_PLACEHOLDER_0", "dummy_java_worker_command",
|
||||
"RAY_WORKER_RAYLET_CONFIG_PLACEHOLDER", "RAY_WORKER_DYNAMIC_OPTION_PLACEHOLDER_1"};
|
||||
"RAY_WORKER_DYNAMIC_OPTION_PLACEHOLDER", "dummy_java_worker_command",
|
||||
"RAY_WORKER_RAYLET_CONFIG_PLACEHOLDER"};
|
||||
SetWorkerCommands({{Language::PYTHON, {"dummy_py_worker_command"}},
|
||||
{Language::JAVA, java_worker_command}});
|
||||
|
||||
@@ -364,10 +364,9 @@ TEST_P(WorkerPoolTest, StartWorkerWithDynamicOptionsCommand) {
|
||||
task_spec.DynamicWorkerOptions());
|
||||
const auto real_command =
|
||||
worker_pool_->GetWorkerCommand(worker_pool_->LastStartedWorkerProcess());
|
||||
ASSERT_EQ(real_command,
|
||||
std::vector<std::string>({"test_op_0", "dummy_java_worker_command",
|
||||
GetNumJavaWorkersPerProcessSystemProperty(1),
|
||||
"test_op_1"}));
|
||||
ASSERT_EQ(real_command, std::vector<std::string>(
|
||||
{"test_op_0", "test_op_1", "dummy_java_worker_command",
|
||||
GetNumJavaWorkersPerProcessSystemProperty(1)}));
|
||||
}
|
||||
|
||||
TEST_P(WorkerPoolTest, PopWorkerMultiTenancy) {
|
||||
|
||||
Reference in New Issue
Block a user