Prhub

#21490 Simplify flush_cache: reject concurrent requests, remove client-side retry

原始 PR 作者 hnyls2002 合并时间 2026-03-27 07:31 文件变更 9 提交数 3 评论 9 代码增减 +110 / -110

执行摘要

简化 flush_cache 逻辑,移除客户端重试,改用服务器端超时并拒绝并发请求。

根据PR body描述,目的是简化flush_cache的实现,移除客户端重试逻辑,使用服务器端超时参数,并改进错误报告。这使API更直观、可靠,减少客户端代码复杂度,避免因并发请求导致的混乱。

建议技术管理者和工程师精读scheduler.py的改动,特别是flush_cache_wrapped和_check_pending_flush函数,以理解并发拒绝和超时处理的设计决策;同时关注测试文件更新,学习如何迁移到新API并确保测试覆盖。

讨论亮点

review评论中,gemini-code-assist[bot]指出测试文件(如test_disaggregation_hicache.py和test_qwen35_hicache.py)中的requests.post调用未检查响应状态,可能导致沉默失败,建议添加response.raise_for_status()。作者在后续提交中采纳了这一建议,通过添加raise_for_status()确保测试在flush失败时抛出异常,提升测试可靠性。

实现拆解

实现方案分为几个部分:

1) 修改HTTP服务器(http_server.py),根据flush_cache结果动态返回成功或错误消息;
2) 在io_struct.py中为FlushCacheReqOutput添加message字段,支持更好的错误信息传递;
3) 重构scheduler.py,将_pending_flush从Deque改为Optional,实现拒绝并发请求的逻辑,并优化超时处理;
4) 移除test_utils.py中的flush_cache_with_retry函数;
5) 更新多个测试文件(如test_scheduler_flush_cache.py和HiCache集成测试),直接使用requests.post带timeout参数,确保测试覆盖立即刷新、延迟刷新、拒绝并发和超时场景。

文件 模块 状态 重要度
python/sglang/srt/managers/scheduler.py scheduling modified 9.0
python/sglang/srt/entrypoints/http_server.py http_server modified 6.0
python/sglang/srt/managers/io_struct.py io_struct modified 4.0
python/sglang/test/test_utils.py test_utils modified 3.0
test/registered/unit/managers/test_scheduler_flush_cache.py test modified 5.0

关键符号

flush_cache_wrapped _check_pending_flush flush_cache (in http_server)

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

评论区精华

测试响应状态检查 测试

gemini-code-assist[bot] 指出测试中的 requests.post 调用未检查响应状态,可能导致沉默失败,建议添加 raise_for_status()。

结论:作者采纳建议,在测试中添加 response.raise_for_status() 以确保 flush 操作失败时抛出异常。 · 已解决

风险与影响

技术风险包括:

1) 并发请求拒绝逻辑可能在边缘场景下遗漏,例如在多个请求几乎同时到达时;
2) 错误消息可能不够详细,影响调试效率;
3) 修改scheduler核心路径(如flush_cache_wrapped和_check_pending_flush)可能引入回归错误,需确保测试全面覆盖;
4) 移除客户端重试后,依赖超时参数的测试在慢速环境中可能失败。

影响范围:

1) 用户调用的flush_cache API行为变更,现在更简洁且错误处理更明确;
2) 客户端代码减少,降低维护成本;
3) 系统行为更可预测,拒绝并发请求避免操作冲突;
4) 测试更新确保新逻辑的正确性,但需验证所有集成测试通过。影响程度中等,主要涉及缓存刷新相关模块,不影响核心推理路径。

核心路径变更 缺少错误处理 测试覆盖风险

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论