-
Notifications
You must be signed in to change notification settings - Fork 118
Open
Description
[任务] Orion Server 支持构建重试机制
[任务分值] 40 分
[背景描述]
当前 Orion Server 在接收到构建请求后,会触发一次 单次 Buck2 构建流程。
该流程在正常情况下可以顺利完成构建并返回结果,但在实际运行过程中,存在以下问题:
1.构建过程存在非确定性失败
- 网络抖动(依赖下载失败、远程缓存不可用)
- 构建节点资源瞬时不足
- Buck2 内部的偶发错误
这些失败通常是临时性的(Transient Failure),通过重试即可恢复。
2.当前系统缺乏重试能力
- 一旦构建失败,需要人工重新触发构建
- 无法区分「可重试失败」与「不可重试失败」
- 对 CI 稳定性和用户体验影响较大
3.缺乏用户侧的重试入口
- UI 上无法针对失败的构建进行手动重试
- 无法复用已有的构建参数和构建范围
- 增加了排查和恢复成本
因此,需要为 Orion Server 增加 自动重试机制 和 手动重试能力,以提升构建系统的稳定性和可用性。
[需求描述]
一、自动重试机制(Automatic Retry)
- 重试触发条件
系统在以下场景下应触发自动重试:
- 构建进程异常退出
- 明确标记为「可重试」的失败类型,例如:
- 网络错误
- 依赖拉取失败
- 构建节点异常中断
以下情况不应自动重试:
- 编译错误(代码错误)
- 测试失败
- 配置错误(BUCK 文件语法错误等)
- 重试策略
- 支持配置最大重试次数(如:默认 3 次)
- 支持重试间隔(固定或指数退避)
- 每一次重试都应:
- 记录为一次新的 build attempt
- 保留与原始构建的关联关系
- 状态与日志
- 构建状态应支持以下扩展:
- retrying
- failed_after_retry
- 日志中需明确标识:
- 第几次重试
- 每次重试的失败原因
二、手动重试机制(Manual Retry)
- UI 触发
- 当构建失败后,在 UI 上提供 Retry Build 按钮
- 按钮仅对具备权限的用户可见(如 CL 作者 / Reviewer / 管理员)
- 重试行为
- 手动重试应:
- 复用原始构建的 targets、参数、环境配置
- 创建一次新的构建执行记录
- 手动重试不受自动重试次数限制(但可做频率限制)
- 关联关系
- UI 中应能清晰看到:
- 原始构建
- 多次自动 / 手动重试的执行历史
- 所有重试结果都归属于同一个 CL / 构建上下文
[代码标准]
- 所有 PR 提交必须签署
Signed-off-by和 使用GPG签名,即提交代码时(使用git commit命令时)至少使用-s -S两个参数,参考 Contributing Guide; - 所有 PR 提交必须通过
GitHub Actions自动化测试,提交 PR 后请关注GitHub Actions结果; - 代码注释均需要使用英文;
[PR 提交地址] 提交到 mega 仓库的 main 分支 `` 目录;
[开发指导]
- 认领任务参考 r2cn 开源实习计划 - 任务认领与确认;
[导师及邮箱] 请申请此题目的同学使用邮件联系导师,或加入到 R2CN Discord 后在 #p-meta 频道和导师交流。
- Quanyi Ma genedna@gmail.com
- Tianxing Ye yetianxing2014@gmail.com
[备注]
- 认领实习任务的同学,必须完成测试任务和注册流程,请参考: r2cn 开源实习计划 - 测试任务 和 r2cn 开源实习计划 - 学生注册与审核