Skip to content

[r2cn] Orion 集成 Antares FUSE 挂载服务 #1724

@genedna

Description

@genedna

[任务] Orion 集成 Antares FUSE 挂载服务

[任务分值] 60 分

[背景描述]

Mega 是一个支持超大规模单体仓库(monorepo)的版本控制系统,采用内容寻址存储和 FUSE 文件系统挂载技术。当前系统包含两个 FUSE 实现:

  1. Dicfuse:传统的异步挂载服务,需要轮询任务状态
  2. Antares:新一代同步挂载服务,提供即时响应的 REST API

Orion 是 Mega 的构建编排服务,负责调用 Buck2 执行代码构建。目前 Orion 仅集成了 Dicfuse,导致挂载操作需要复杂的异步轮询逻辑。为了简化代码并提升用户体验,需要让 Orion 支持调用 Antares API。

[需求描述]

orion/src/buck_controller.rs 中实现 Antares 挂载服务的集成:

  1. 实现 Antares 挂载函数

    • 已有函数骨架 mount_antares_fs(repo: &str, cl: Option<&str>)
    • 调用 Antares REST API:POST http://localhost:2725/antares/mounts
    • 请求体格式:{"path": "/repo/path", "cl": "optional_cl_id"}
    • 成功时返回挂载点路径(mountpoint 字段)
    • 添加适当的错误处理和日志记录
  2. 实现 Antares 卸载函数

    • 创建新函数 unmount_antares_fs(mount_id: Uuid)
    • 调用 Antares REST API:DELETE http://localhost:2725/antares/mounts/{mount_id}
    • 处理卸载响应并记录日志
  3. 添加集成测试

    • orion/tests/ 目录下创建测试文件
    • 使用 mock HTTP 服务器测试 Antares API 调用
    • 验证挂载/卸载的正常流程和错误情况
    • 测试参数校验和边界条件
  4. 更新文档

    • 在函数上添加详细的文档注释(///
    • 说明参数含义、返回值、错误类型
    • 提供使用示例

[技术要点]

  • 使用 reqwest 发送 HTTP 请求,设置合理的超时时间(参考现有 MOUNT_TIMEOUT_SECS
  • 使用 serde_json 处理 JSON 序列化/反序列化
  • 使用 tracing 记录关键操作日志(info/debug/error 级别)
  • 错误类型统一为 Box<dyn Error + Send + Sync>
  • 参考 Antares API 定义文件:scorpio/src/daemon/antares.rs

[验收标准]

  1. ✅ 代码通过 cargo clippy --manifest-path orion/Cargo.toml --all-features -- -D warnings
  2. ✅ 代码通过 cargo fmt --check
  3. ✅ 测试通过 cargo test --manifest-path orion/Cargo.toml
  4. ✅ PR 通过 GitHub Actions CI 检查
  5. ✅ 函数签名和文档注释符合 Rust 规范
  6. ✅ 日志输出清晰,便于调试和问题排查

[代码标准]

  1. 所有 PR 提交必须签署 Signed-off-by 和使用 GPG 签名,即提交代码时(使用 git commit 命令时)至少使用 -s -S 两个参数,参考 Contributing Guide
  2. 所有 PR 提交必须通过 GitHub Actions 自动化测试,提交 PR 后请关注 GitHub Actions 结果;
  3. 代码注释均需要使用英文;
  4. 遵循 Rust 2021 Edition 标准和项目 .github/copilot-instructions.md 中的编码规范;
  5. 优先使用 Result? 操作符进行错误处理,避免 unwrap()/expect()

[PR 提交地址]

提交到 mega 仓库的 main 分支 orion/ 目录;

[开发指导]

  1. 认领任务参考 r2cn 开源实习计划 - 任务认领与确认
  2. 开发前请先阅读 Antares API 文档(scorpio/src/daemon/antares.rs 中的文档注释);
  3. 参考现有的 mount_fs() 函数实现,了解 HTTP 请求和错误处理模式;
  4. 建议先在本地启动 Scorpio 服务进行手动测试,再编写集成测试;
  5. 如遇到问题,可在 Discord #p-mega 频道向导师和社区求助;

[相关文件]

  • orion/src/buck_controller.rs:需要修改的主文件
  • scorpio/src/daemon/antares.rs:Antares API 定义
  • scorpio/src/daemon/mod.rs:Scorpio 服务入口
  • .github/workflows/base.yml:CI 配置文件

[导师及邮箱]

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

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

[备注]

  1. 认领实习任务的同学,必须完成测试任务和注册流程,请参考: r2cn 开源实习计划 - 测试任务r2cn 开源实习计划 - 学生注册与审核
  2. 本任务预计工作量:8-12 小时
  3. 建议先完成基本功能,再完善测试和文档
  4. 提交 PR 前请自行运行本地测试,确保代码质量
    这个给周佳琪同学,让他帮忙坐下orion那边的对接

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions