Prhub

#21320 feat: add --strict-ports option for predictable port assignment

原始 PR 作者 yang1002378395-cmyk 合并时间 2026-03-27 16:40 文件变更 2 提交数 3 评论 5 代码增减 +42 / -12

执行摘要

新增 --strict-ports 选项,使服务器在端口被占用时立即失败,确保端口分配确定性。

根据PR body描述,当前当请求端口被占用时,settle_port自动选择可用端口,导致用户:

1) 不知道服务器最终使用哪个端口,2) 无法可靠创建客户端配置,3) 存在多服务器实例端口冲突。因此添加--strict-ports选项以确保端口分配的确定性。

建议精读此PR,因为它展示了在鲁棒性(自动端口选择)和可预测性(严格端口分配)之间的设计权衡。重点关注_adjust_network_ports方法的修改和错误处理逻辑,以理解如何优雅地添加配置选项。

讨论亮点

review中,gemini-code-assist[bot]提出两点:

1) 将registry.py的RuntimeError改为返回None可能隐藏配置问题,建议回退到异常(category: correctness);
2) strict-ports错误消息应一致,所有端口错误都包含解决建议(category: design)。结论是:registry.py在后续commit中被revert回RuntimeError,并改进了错误消息一致性。

实现拆解

实现主要在python/sglang/multimodal_gen/runtime/server_args.py中添加strict_ports布尔字段(默认false),修改_adjust_network_ports方法:启用时调用is_port_available检查端口,失败抛出RuntimeError;否则保持自动选择逻辑。同时,在add_cli_args中添加--strict-portsCLI参数。另一个文件python/sglang/multimodal_gen/registry.py最初修改错误处理,但根据review被revert回RuntimeError,与strict-ports功能无直接关联。

文件 模块 状态 重要度
python/sglang/multimodal_gen/runtime/server_args.py multimodal_gen/runtime modified 8.0
python/sglang/multimodal_gen/registry.py multimodal_gen modified 2.0

关键符号

ServerArgs._adjust_network_ports ServerArgs.add_cli_args

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

registry.py 错误处理变更 正确性

gemini-code-assist[bot] 指出将 RuntimeError 改为返回 None 可能隐藏配置问题,导致后期 NoneType 错误,建议回退到异常以快速失败。

结论:在后续 commit 中被 revert,保持 RuntimeError,避免潜在问题。 · 已解决

strict-ports 错误消息一致性 设计

gemini-code-assist[bot] 建议使所有端口错误消息一致,包含解决建议,以提升用户体验。

结论:错误消息被改进,确保 HTTP、scheduler 和 master 端口错误都提供一致的提示信息。 · 已解决

风险与影响

主要风险是启用--strict-ports后,端口被占用时服务器启动失败率增加,但这是预期行为,无性能或安全风险。兼容性上,默认行为不变,不影响现有用户。错误处理逻辑变更需确保错误消息清晰,避免误导用户。

用户现在可选择严格端口模式,确保端口分配确定性,便于配置管理和调试;系统层面,新增选项不影响现有功能,向后兼容;团队需了解新选项以正确使用,测试计划已覆盖相关场景。

端口检查失败率增加 向后兼容性

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论