已合并
feat(rm): deploy 锁输家改为 follower 等待室——跨副本冷竞争零多余 Pod(M8) #438
feat(rm): deploy 锁输家改为 follower 等待室——跨副本冷竞争零多余 Pod(M8) #438
已合并
王明琦创建于 8月24日
王明琦
王明琦成员
8月24日

Paired: GitHub #86 ↔ GitCode !438

What type of PR is this?

/kind

Self-checklist:(请自检,在[ ]内打上x,我们将检视你的完成情况,否则会导致pr无法合入)

likedislike
Pull Request已成功合入, 合并人@曹玉哲
(感谢 王明琦 的贡献)
atomgit-bot
atomgit-bot
8月24日 评论:

变更摘要

本 PR(feat(rm),M8)将 deploy 锁输家的处理从「自旋重试、可能自建第 2 个空 Pod」改为「follower 等待室」:锁竞争失败的一方不再自行部署,而是通过原子闸门进入等待室,轮询 leader 的 Pod 注册后直接复用,实现跨副本冷竞争零多余 Pod。核心由新增 Lua 脚本 LUA_DEPLOY_FOLLOWER_GATE 提供原子准入(ZSET + deadline,先清过期成员再 ZADD 先行 + ZCARD 超限自退),ResourceOrchestrator 新增 _follow_leader 等待逻辑(有界等待、leader 失败则 follower 直接失败、overflow 严格快失败),ResourceState 新增 scope_deploy_followers ZSET 键及配套方法,SessionManager 的 pool_config() 向下游透传 pod_concurrency 用于推导等待室上限(pc-1),并配套更新/新增集成与单元测试。

主要改动

  • 新增 LUA_DEPLOY_FOLLOWER_GATE 原子闸门脚本(lua_scripts.py):以 deadline 秒级时间戳为 ZSET score,先 ZREMRANGEBYSCORE 清过期成员(崩溃兜底),再 ZADD 先行 + ZCARD 超限自退,保证并发同时到达也不超收,杜绝「先查后加」的竞态。

  • deploy 输家改为 follower 等待室(orchestrator.py):抢锁失败后不再 asyncio.sleep 重试,改为调用 _follow_leader——准入上限为 pod_concurrency - 1,超限抛 MaxPodsReached 快失败;轮询到 leader 新 Pod 注册(pod_sse_url 可见)即复用返回,等待上界为 ready_timeout + FOLLOWER_WAIT_MARGIN;若 leader 锁已释放且无进展则 follower 抛 DeployFailed 不接管,finally 中通过 remove_deploy_follower 清成员防虚占名额。

  • 状态层新增 follower 等待室支持(state.py):新增 scope_deploy_followers ZSET 键(request_id → deadline),以及 try_add_deploy_follower、remove_deploy_follower(幂等)、deploy_follower_count、pod_ids(follower 检测 leader 注册进展)、lock_held(判断 leader 是否已放弃锁)等方法。

  • 下发 pod_concurrency 池参数(session_manager/models.py):Template.pool_config() 返回值新增 pod_concurrency,供 RM 的 follower 等待室推导上限(pc-1),且明确不参与 max_pods 判定(容量闸门仍在 SM 侧)。

  • 测试更新与新增(test_multi_replica.py、test_rm_state.py):test_deploy_lock_serializes_cross_replica_deploys 改为断言恰好 1 次部署且双方落同一 Pod;新增等待室满时 overflow 快失败、leader 部署失败时 follower 直接失败、闸门并发不超收、过期成员清理、成员退出与 lock_held/pod_ids 等用例。

likedislike
不准确?
openJiuwen-bot成员
8月24日 评论:

欢迎来到 openJiuwen 社区

Hey @wangmingqi , 感谢你对社区的贡献.

机器人使用手册

有关指令的使用,可以点击 此处 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。

likedislike
atomgit-bot
atomgit-bot
8月24日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
atomgit-bot
atomgit-bot
8月24日 评论:

AtomGit AI 助手使用指南

在 PR 评论中使用命令即可触发。支持在普通评论和代码行评论中使用。

功能 命令 说明
代码审查 /ai review 检查代码质量、潜在问题、安全风险
PR 摘要 /ai summary 生成 PR 变更内容的结构化摘要
代码解释 /ai explain 解释代码变更的逻辑和意图
自由提问 @atomgit-bot <问题> 询问关于本 PR 的任何问题
帮助 /ai help 显示此帮助信息

免责声明

AI 助手可能存在误判,请结合自身判断。可以对评论点 👍 或 👎 帮助我们改进。

likedislike
不准确?
OopenJiuwen-bot成员
8月24日 添加了label:openJiuwen-cla/yes
Oopenjiuwen-sync成员
8月24日 修改了pull request 的描述
openJiuwen-bot成员
8月24日 评论:
任务名称 结果 日志操作
静态检查 ❌FAILED 点此跳转
禁用词扫描 ✅SUCCESS 点此跳转
防投毒检查 ✅SUCCESS 点此跳转
开源合规检查 ✅SUCCESS 点此跳转
UT测试 N/A N/A
ST测试 N/A N/A
build 编译包 N/A N/A
ruff codecheck {{ruff_codecheck_result}} {{ruff_codecheck_link_text}}
likedislike
OopenJiuwen-bot成员
8月24日 添加了label:ci-failed
王明琦王明琦成员
8月24日 强制推送  1 个提交:58fc3301-feat(rm): deploy 锁输家改为 follower 等待室——跨副本冷竞争零多余 Pod(M8)
OopenJiuwen-bot成员
8月24日 删除了label:openJiuwen-cla/yes
OopenJiuwen-bot成员
8月24日 添加了label:openJiuwen-cla/yes
openJiuwen-bot成员
8月24日 评论:

CLA 签署成功

wangmingqi, 感谢您的代码贡献。 所有的代码贡献者都已完成了 CLA 签署。 👍

likedislike
OopenJiuwen-bot成员
8月24日 删除了label:ci-failed
openJiuwen-bot成员
8月24日 评论:
任务名称 结果 日志操作
静态检查 ✅SUCCESS 点此跳转
禁用词扫描 ✅SUCCESS 点此跳转
防投毒检查 ✅SUCCESS 点此跳转
开源合规检查 ✅SUCCESS 点此跳转
UT测试 N/A N/A
ST测试 N/A N/A
build 编译包 N/A N/A
ruff codecheck {{ruff_codecheck_result}} {{ruff_codecheck_link_text}}
likedislike
OopenJiuwen-bot成员
8月24日 添加了label:ci-successful
曹曹玉哲成员
8月24日 合入了pull request
OopenJiuwen-bot成员
8月24日 删除了label:ci-successful