# PR #21903 完整报告

- 仓库：`sgl-project/sglang`
- 标题：[CI] Add timeouts to Slack upload urlopen and WebClient
- 合并时间：2026-04-03 10:30
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/21903

---

# 执行摘要

本次 PR 为扩散模型夜间 CI 作业中的 Slack 上传功能添加了超时设置（urlopen 30 秒，WebClient 60 秒），解决了因网络不可达导致 CI 作业卡死直至触发 GitHub Actions 60 分钟超时的问题。这是一个针对 CI 稳定性的基础设施改进，实现简洁，风险较低。

# 功能与动机

**问题背景**：扩散模型夜间 CI 作业在执行 Slack 上传时，`urlopen()` 函数在没有显式设置超时的情况下会回退到操作系统默认的 TCP 超时（通常超过 2 分钟）。当网络缓慢或不可达时，这会导致整个 CI 步骤长时间阻塞，最终触发 GitHub Actions 的 60 分钟步骤超时，使 CI 作业失败。

**解决方案**：在关键的网络调用处添加显式超时设置，使网络故障时能够快速失败并触发重试机制，而不是无限期等待。

# 实现拆解

仅修改了一个文件，涉及两个关键调用点的超时参数添加：

| 调用位置 | 原代码 | 新代码 | 超时值 | 作用 |
|----------|--------|--------|--------|------|
| 图像下载 | `with urlopen(path) as response:` | `with urlopen(path, timeout=30) as response:` | 30 秒 | 限制从 URL 下载图像文件的超时时间 |
| Slack API 客户端 | `client = WebClient(token=token)` | `client = WebClient(token=token, timeout=60)` | 60 秒 | 限制 Slack API 调用的超时时间 |

这两个修改都位于 `upload_file_to_slack` 函数中，该函数负责将测试生成的图像上传到 Slack 频道进行结果展示。

# 评论区精华

本次 PR 没有 review 讨论，从提交信息和 PR body 可以看出变更动机清晰，实现直接。关联 Issue 中的评论主要是自动化工具提示和 CI 重跑指令，未涉及技术讨论。

# 风险与影响

**技术风险**：
1. 超时值设置可能在某些网络环境下过短，导致正常上传被误判为失败
2. 缺少对超时异常处理的测试验证，可能掩盖其他潜在问题

**影响范围**：
1. 仅影响扩散模型测试中的 Slack 上传功能，不影响核心业务逻辑
2. 显著改善 CI 稳定性，防止网络问题导致整个 CI 作业卡死
3. 对最终用户和系统功能无直接影响

# 关联脉络

从近期历史 PR 可以看出，扩散模型模块（diffusion）是 SGLang 项目的重点发展领域之一：
- PR #21955 修复了扩散模型多阶段去噪的性能分析器问题
- PR #21633 为 MOVA 扩散模型添加了 NPU 硬件支持

本次 PR 属于该模块的 CI 基础设施改进，为扩散模型的功能开发和测试提供了更稳定的环境。这种针对特定模块的 CI 优化反映了项目在扩展新功能时对测试稳定性的持续关注。