mirror of
https://github.com/wassname/ray.git
synced 2026-07-24 13:20:22 +08:00
Fix dashboard agent check ppid is raylet pid (#12256)
* Dashboard agent check ppid is raylet pid * Improve implementation * Refine code * Make the RAY_NODE_PID environment required for dashboard agent Co-authored-by: 刘宝 <po.lb@antfin.com>
This commit is contained in:
+4
-1
@@ -91,9 +91,12 @@ class DashboardAgent(object):
|
||||
async def _check_parent():
|
||||
"""Check if raylet is dead."""
|
||||
curr_proc = psutil.Process()
|
||||
ppid = int(os.environ["RAY_NODE_PID"])
|
||||
logger.info("Parent pid is %s", ppid)
|
||||
while True:
|
||||
parent = curr_proc.parent()
|
||||
if parent is None or parent.pid == 1:
|
||||
if parent is None or parent.pid == 1 or (ppid and
|
||||
ppid != parent.pid):
|
||||
logger.error("raylet is dead, agent will die because "
|
||||
"it fate-shares with raylet.")
|
||||
sys.exit(0)
|
||||
|
||||
@@ -137,6 +137,11 @@ def test_basic(ray_start_with_dashboard):
|
||||
assert agent_proc.pid == agent_pid
|
||||
time.sleep(1)
|
||||
|
||||
# The agent should be dead if raylet exits.
|
||||
raylet_proc.kill()
|
||||
raylet_proc.wait()
|
||||
agent_proc.wait(5)
|
||||
|
||||
# Check redis keys are set.
|
||||
logger.info("Check redis keys are set.")
|
||||
dashboard_address = client.get(dashboard_consts.REDIS_KEY_DASHBOARD)
|
||||
|
||||
@@ -58,8 +58,10 @@ void AgentManager::StartAgent() {
|
||||
}
|
||||
argv.push_back(NULL);
|
||||
// Set node id to agent.
|
||||
static std::string pid_string = std::to_string(getpid());
|
||||
ProcessEnvironment env;
|
||||
env.insert({"RAY_NODE_ID", options_.node_id.Hex()});
|
||||
env.insert({"RAY_NODE_PID", pid_string});
|
||||
Process child(argv.data(), nullptr, ec, false, env);
|
||||
if (!child.IsValid() || ec) {
|
||||
// The worker failed to start. This is a fatal error.
|
||||
|
||||
Reference in New Issue
Block a user