Support unlimited JVM options (#9910)

This commit is contained in:
Kai Yang
2020-08-10 16:08:33 +08:00
committed by GitHub
parent 7b87da7f03
commit 37821f0b4c
6 changed files with 13 additions and 21 deletions
@@ -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);
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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";
+1 -2
View File
@@ -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;
+3 -9
View File
@@ -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;
}
+5 -6
View File
@@ -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) {