Skip to content

[r2cn] Orion Server 支持构建重试机制 #1744

@benjamin-747

Description

@benjamin-747

[任务] Orion Server 支持构建重试机制

[任务分值] 40 分

[背景描述]

当前 Orion Server 在接收到构建请求后,会触发一次 单次 Buck2 构建流程。
该流程在正常情况下可以顺利完成构建并返回结果,但在实际运行过程中,存在以下问题:
1.构建过程存在非确定性失败

  • 网络抖动(依赖下载失败、远程缓存不可用)
  • 构建节点资源瞬时不足
  • Buck2 内部的偶发错误

这些失败通常是临时性的(Transient Failure),通过重试即可恢复。
2.当前系统缺乏重试能力

  • 一旦构建失败,需要人工重新触发构建
  • 无法区分「可重试失败」与「不可重试失败」
  • 对 CI 稳定性和用户体验影响较大

3.缺乏用户侧的重试入口

  • UI 上无法针对失败的构建进行手动重试
  • 无法复用已有的构建参数和构建范围
  • 增加了排查和恢复成本

因此,需要为 Orion Server 增加 自动重试机制 和 手动重试能力,以提升构建系统的稳定性和可用性。

[需求描述]

一、自动重试机制(Automatic Retry)

  1. 重试触发条件
    系统在以下场景下应触发自动重试:
  • 构建进程异常退出
  • 明确标记为「可重试」的失败类型,例如:
    • 网络错误
    • 依赖拉取失败
    • 构建节点异常中断

以下情况不应自动重试:

  • 编译错误(代码错误)
  • 测试失败
  • 配置错误(BUCK 文件语法错误等)
  1. 重试策略
  • 支持配置最大重试次数(如:默认 3 次)
  • 支持重试间隔(固定或指数退避)
  • 每一次重试都应:
    • 记录为一次新的 build attempt
    • 保留与原始构建的关联关系
  1. 状态与日志
  • 构建状态应支持以下扩展:
    • retrying
    • failed_after_retry
  • 日志中需明确标识:
    • 第几次重试
    • 每次重试的失败原因

二、手动重试机制(Manual Retry)

  1. UI 触发
  • 当构建失败后,在 UI 上提供 Retry Build 按钮
  • 按钮仅对具备权限的用户可见(如 CL 作者 / Reviewer / 管理员)
  1. 重试行为
  • 手动重试应:
    • 复用原始构建的 targets、参数、环境配置
    • 创建一次新的构建执行记录
    • 手动重试不受自动重试次数限制(但可做频率限制)
  1. 关联关系
  • UI 中应能清晰看到:
    • 原始构建
    • 多次自动 / 手动重试的执行历史
  • 所有重试结果都归属于同一个 CL / 构建上下文

[代码标准]

  1. 所有 PR 提交必须签署 Signed-off-by 和 使用 GPG 签名,即提交代码时(使用 git commit 命令时)至少使用 -s -S 两个参数,参考 Contributing Guide
  2. 所有 PR 提交必须通过 GitHub Actions 自动化测试,提交 PR 后请关注 GitHub Actions 结果;
  3. 代码注释均需要使用英文;

[PR 提交地址] 提交到 mega 仓库的 main 分支 `` 目录;

[开发指导]

  1. 认领任务参考 r2cn 开源实习计划 - 任务认领与确认;

[导师及邮箱] 请申请此题目的同学使用邮件联系导师,或加入到 R2CN Discord 后在 #p-meta 频道和导师交流。

  1. Quanyi Ma genedna@gmail.com
  2. Tianxing Ye yetianxing2014@gmail.com

[备注]

  1. 认领实习任务的同学,必须完成测试任务和注册流程,请参考: r2cn 开源实习计划 - 测试任务r2cn 开源实习计划 - 学生注册与审核

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions