From 107c6fc42b16ec0a2b880316e98c0994c8bab924 Mon Sep 17 00:00:00 2001 From: Zhenyu Zhang <1784786393@qq.com> Date: Wed, 12 Aug 2026 20:42:56 -0700 Subject: [PATCH] Handle environment manager capacity limits --- .../online_server/env_instance_manager.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/online_server/online_server/env_instance_manager.py b/online_server/online_server/env_instance_manager.py index 3023ed5..2da1c76 100644 --- a/online_server/online_server/env_instance_manager.py +++ b/online_server/online_server/env_instance_manager.py @@ -12,7 +12,7 @@ import subprocess import threading from datetime import datetime -from fastapi import FastAPI +from fastapi import FastAPI, HTTPException from typing import List import heapq import psutil @@ -97,9 +97,10 @@ def __init__(self, cwd: str, port: int, logfile_dir: str): def start(self): self.start_time = time.time() log_file = os.path.join(self.logfile_dir, f'env_{self.port}.log') + bind_host = os.environ.get("SERVER_BIND_HOST", "::") self.proc = PortMonitor.start( cmd=["uvicorn", "env_server:app", "--port", - str(self.port), "--host", "::", "--workers", "1"], + str(self.port), "--host", bind_host, "--workers", "1"], cwd=self.cwd, port=self.port, log_file=log_file) @@ -246,7 +247,15 @@ async def lifespan(app: FastAPI): @app.get("/get_instance") def get_instance(): - inst = EnvInstanceManager.get_instance() + try: + inst = EnvInstanceManager.get_instance() + except Exception as exc: + if "No available resources to allocate" in str(exc): + raise HTTPException( + status_code=503, + detail="No available resources to allocate.", + ) from exc + raise return {"uid": inst.uid, "port": inst.get_port()} @@ -266,4 +275,4 @@ def release_instance(uid: str): app.state.workers = args.workers import uvicorn - uvicorn.run(app, host="::", port=8000) + uvicorn.run(app, host=os.environ.get("SERVER_BIND_HOST", "::"), port=8000)