已合并
fix(session): 热更新串行化 + 旧 SM 超时强制 stop,杜绝孤儿 Pod #420
王明琦创建于 24 天前
fix(session): 热更新串行化 + 旧 SM 超时强制 stop,杜绝孤儿 Pod #420
已合并
Pull Request已成功合入, 合并人@曹玉哲
(感谢 王明琦 的贡献)atomgit-bot
24 天前 评论:
24 天前 评论:
变更摘要
本 PR 主要修复会话运行时热更新(update_config)过程中新旧 ServiceManager 可能并存、以及旧 ServiceManager 清理失败时静默泄漏的问题,从而杜绝孤儿 Pod / 重复扩容。核心改动是将整个热更新切换流程(包括等待旧 SM 销毁)纳入 _update_lock 串行化保护,新增 _old_sm_cleanup_task 字段记录上一次清理任务并在下次热更新前等待其完成,同时修复了重复创建清理任务的问题,并在重试仍无法空闲清理时强制调用旧 SM 的 stop() 释放其持有的 Pod。
主要改动
- 热更新全流程串行化:
Access.update_config将创建、启动新 SM 以及引用切换全部放入_update_lock临界区,并在切换前等待上一次旧 SM 的清理任务完成,禁止新旧 SM 并存与并发热更新。 - 单次清理任务 + 任务跟踪: 新增
_old_sm_cleanup_task字段保存旧 SM 的后台清理任务,移除原先重复的两处asyncio.create_task调用,改为只创建一个任务并记录,供下次热更新前await。 - 旧 SM 超时强制停止:
_graceful_stop_old_service_manager在达到max_retries仍无法按空闲清理时,不再仅打日志返回,而是调用await old_sm.stop()强制停止并释放其 Pod,避免 ServiceManager 与 Pod 泄漏。 - 新增回归测试:
test_access_hotreload.py增加两个测试用例,分别验证旧 SM 销毁未完成时第二次热更新会被阻塞等待、每次只起一个清理任务,以及旧 SM 始终 busy 时超次数后会被强制stop。


不准确?
atomgit-bot
24 天前 评论:
24 天前 评论:
24 天前 添加了label:openJiuwen-cla/yes
24 天前 修改了pull request 的描述
openJiuwen-bot
24 天前 评论:
24 天前 评论:
欢迎来到 openJiuwen 社区
Hey @wangmingqi , 感谢你对社区的贡献.
机器人使用手册
有关指令的使用,可以点击 此处 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。


atomgit-bot
24 天前 评论:
24 天前 评论:
openJiuwen-bot
24 天前 评论:
24 天前 评论:
24 天前 添加了label:ci-failed
24 天前 删除了label:openJiuwen-cla/yes
24 天前 添加了label:openJiuwen-cla/yes
openJiuwen-bot
24 天前 评论:
24 天前 评论:
24 天前 删除了label:ci-failed
openJiuwen-bot
24 天前 评论:
24 天前 评论:
24 天前 添加了label:ci-successful
24 天前 删除了label:ci-successful
Paired: GitHub #52 ↔ GitCode !420
What type of PR is this?
/kind
Self-checklist:(请自检,在[ ]内打上x,我们将检视你的完成情况,否则会导致pr无法合入)