diff --git a/java/runtime/src/main/java/io/ray/runtime/runner/RunManager.java b/java/runtime/src/main/java/io/ray/runtime/runner/RunManager.java index ec15f8121..21b47aaf9 100644 --- a/java/runtime/src/main/java/io/ray/runtime/runner/RunManager.java +++ b/java/runtime/src/main/java/io/ray/runtime/runner/RunManager.java @@ -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); diff --git a/python/ray/services.py b/python/ray/services.py index 8d9b5afee..3a819f273 100644 --- a/python/ray/services.py +++ b/python/ray/services.py @@ -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 diff --git a/src/ray/common/constants.h b/src/ray/common/constants.h index 4d816ab17..0ac238b2a 100644 --- a/src/ray/common/constants.h +++ b/src/ray/common/constants.h @@ -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"; diff --git a/src/ray/protobuf/common.proto b/src/ray/protobuf/common.proto index 8ac33a109..8745b3a57 100644 --- a/src/ray/protobuf/common.proto +++ b/src/ray/protobuf/common.proto @@ -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; diff --git a/src/ray/raylet/worker_pool.cc b/src/ray/raylet/worker_pool.cc index 167fbdcfe..350bb5d2e 100644 --- a/src/ray/raylet/worker_pool.cc +++ b/src/ray/raylet/worker_pool.cc @@ -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 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; } diff --git a/src/ray/raylet/worker_pool_test.cc b/src/ray/raylet/worker_pool_test.cc index d8cbbfea3..c8fae0ae7 100644 --- a/src/ray/raylet/worker_pool_test.cc +++ b/src/ray/raylet/worker_pool_test.cc @@ -352,8 +352,8 @@ TEST_P(WorkerPoolTest, PopWorkersOfMultipleLanguages) { TEST_P(WorkerPoolTest, StartWorkerWithDynamicOptionsCommand) { const std::vector 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({"test_op_0", "dummy_java_worker_command", - GetNumJavaWorkersPerProcessSystemProperty(1), - "test_op_1"})); + ASSERT_EQ(real_command, std::vector( + {"test_op_0", "test_op_1", "dummy_java_worker_command", + GetNumJavaWorkersPerProcessSystemProperty(1)})); } TEST_P(WorkerPoolTest, PopWorkerMultiTenancy) {