Prhub

#22766 [Bugfix] Add missing http_worker_ipc in session error path

原始 PR 作者 inkcherry 合并时间 2026-04-20 03:47 文件变更 1 提交数 2 评论 5 代码增减 +1 / -0

执行摘要

修复调度器会话错误路径中缺失的 http_worker_ipc 字段,避免多 HTTP 工作进程场景下的响应路由错误。

PR body 中提供了日志证据:IPC name is None, output type=<class 'sglang.srt.managers.io_struct.BatchStrOutput'>, skipping...,表明在多 HTTP 工作进程(TP > 1)设置中,当会话请求因会话未找到或正在关闭而进入错误路径时,由于 Req 对象缺少 http_worker_ipc 字段,响应无法被正确路由,导致 IPC 名称为 None 并跳过。此问题在 #19547 的会话逻辑重构中被遗漏。

该 PR 变更微小且聚焦,无需精读,但值得关注其作为重构后遗漏字段的典型案例。对于维护者,建议检查其他类似的重构场景,确保所有路径的参数一致性。

讨论亮点

Review 讨论较少。主要讨论点来自 Issue 评论:

  • HaiShaw 请求了 review 并触发了 CI。
  • amd-bot 自动分析了变更,指出这是一个仅影响会话错误处理路径的微小 bugfix,且失败的 CI 测试均未覆盖该路径,因此 CI 失败与此 PR 无关。
  • 结论是变更被接受并合并,无重大争议或未解决的疑虑。

实现拆解

  1. 定位问题入口:在 python/sglang/srt/managers/scheduler.py 文件的 handle_generate_request 方法中,当会话未找到或正在关闭时,会进入错误处理分支。
  2. 修复核心逻辑:在该分支中,创建 Req 对象时,补充了 http_worker_ipc=recv_req.http_worker_ipc 参数,确保错误响应能携带正确的 IPC 信息,以便路由回对应的 HTTP 工作进程。
  3. 保持一致性:该文件中的其他 Req 调用均已包含此字段,此次修复使错误路径与其他路径保持一致。
  4. 测试与部署配套:本次变更仅涉及核心逻辑的微小修复,未包含测试、配置或部署的配套改动。amd-bot 的评论指出,失败的 CI 测试均未涉及会话错误路径,因此此修复不影响现有测试。
文件 模块 状态 重要度
python/sglang/srt/managers/scheduler.py 调度器 modified 4.96

关键符号

handle_generate_request

关键源码片段

python/sglang/srt/managers/scheduler.py core-logic

这是本次 PR 唯一修改的文件,包含了调度器处理生成请求的核心逻辑,修复了会话错误路径中 Req 对象构造时缺失 http_worker_ipc 字段的问题。

def handle_generate_request(self, recv_req):
    # ... 其他代码 ...
    else:
        # Session not found, or session is closing
        if session_id in self.session_controller:
            error_msg = f"Invalid request: close was requested for session {session_id}"
        else:
            error_msg = f"Invalid request: session id {session_id} does not exist"
        # 修复点:在创建错误请求时,补充 http_worker_ipc 字段,确保响应能路由回正确的 HTTP 工作进程
        req = Req(
            recv_req.rid,
            recv_req.input_text,
            recv_req.input_ids,
            recv_req.sampling_params,
            vocab_size=self.model_config.vocab_size,
            http_worker_ipc=recv_req.http_worker_ipc, # 新增字段,修复路由问题
        )
        req.tokenizer = self.tokenizer
        req.set_finish_with_abort(error_msg)
        self.init_req_max_new_tokens(req)
        self._add_request_to_queue(req)
        return
    # ... 其他代码 ...

评论区精华

CI 失败与 PR 相关性分析 question

amd-bot 自动分析指出,CI 中的多个失败测试均未涉及会话错误路径,因此与此 PR 的变更无关。

结论:确认 PR 变更不会导致 CI 失败,降低了合并风险。 · 已解决

风险与影响

技术风险极低

  1. 回归风险:变更仅影响会话错误处理路径(会话未找到或正在关闭),这是相对边缘的场景,且修复是添加一个缺失字段,不会破坏正常流程。amd-bot 确认失败的 CI 测试均未涉及此路径,进一步降低了回归风险。
  2. 性能与安全风险:无性能影响;添加字段不引入新的安全漏洞。
  3. 兼容性风险:无,因为只是补充了现有 Req 构造函数中已支持的字段。
    主要风险:如果 recv_req.http_worker_ipc 在某些边缘情况下为 None 或无效,可能导致路由问题,但此风险已存在于其他使用该字段的路径中,非本 PR 引入。

影响范围有限但关键

  1. 用户影响:对于使用多 HTTP 工作进程(TP > 1)且遇到会话错误(如无效会话 ID 或会话关闭)的用户,修复前错误响应可能无法正确返回,导致客户端收不到响应或响应延迟;修复后确保了错误响应的正确路由,提升了系统的健壮性和可观测性。
  2. 系统影响:仅影响调度器的错误处理逻辑,不改变核心推理路径或性能。
  3. 团队影响:这是一个简单的 bugfix,易于理解和维护,有助于保持代码一致性。
边缘路径遗漏 多进程路由依赖

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论