-
Notifications
You must be signed in to change notification settings - Fork 118
Open
Description
[任务] Orion 集成 Antares FUSE 挂载服务
[任务分值] 60 分
[背景描述]
Mega 是一个支持超大规模单体仓库(monorepo)的版本控制系统,采用内容寻址存储和 FUSE 文件系统挂载技术。当前系统包含两个 FUSE 实现:
- Dicfuse:传统的异步挂载服务,需要轮询任务状态
- Antares:新一代同步挂载服务,提供即时响应的 REST API
Orion 是 Mega 的构建编排服务,负责调用 Buck2 执行代码构建。目前 Orion 仅集成了 Dicfuse,导致挂载操作需要复杂的异步轮询逻辑。为了简化代码并提升用户体验,需要让 Orion 支持调用 Antares API。
[需求描述]
在 orion/src/buck_controller.rs 中实现 Antares 挂载服务的集成:
-
实现 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字段) - 添加适当的错误处理和日志记录
- 已有函数骨架
-
实现 Antares 卸载函数
- 创建新函数
unmount_antares_fs(mount_id: Uuid) - 调用 Antares REST API:
DELETE http://localhost:2725/antares/mounts/{mount_id} - 处理卸载响应并记录日志
- 创建新函数
-
添加集成测试
- 在
orion/tests/目录下创建测试文件 - 使用 mock HTTP 服务器测试 Antares API 调用
- 验证挂载/卸载的正常流程和错误情况
- 测试参数校验和边界条件
- 在
-
更新文档
- 在函数上添加详细的文档注释(
///) - 说明参数含义、返回值、错误类型
- 提供使用示例
- 在函数上添加详细的文档注释(
[技术要点]
- 使用
reqwest发送 HTTP 请求,设置合理的超时时间(参考现有MOUNT_TIMEOUT_SECS) - 使用
serde_json处理 JSON 序列化/反序列化 - 使用
tracing记录关键操作日志(info/debug/error 级别) - 错误类型统一为
Box<dyn Error + Send + Sync> - 参考 Antares API 定义文件:
scorpio/src/daemon/antares.rs
[验收标准]
- ✅ 代码通过
cargo clippy --manifest-path orion/Cargo.toml --all-features -- -D warnings - ✅ 代码通过
cargo fmt --check - ✅ 测试通过
cargo test --manifest-path orion/Cargo.toml - ✅ PR 通过 GitHub Actions CI 检查
- ✅ 函数签名和文档注释符合 Rust 规范
- ✅ 日志输出清晰,便于调试和问题排查
[代码标准]
- 所有 PR 提交必须签署
Signed-off-by和使用GPG签名,即提交代码时(使用git commit命令时)至少使用-s -S两个参数,参考 Contributing Guide; - 所有 PR 提交必须通过
GitHub Actions自动化测试,提交 PR 后请关注GitHub Actions结果; - 代码注释均需要使用英文;
- 遵循 Rust 2021 Edition 标准和项目
.github/copilot-instructions.md中的编码规范; - 优先使用
Result和?操作符进行错误处理,避免unwrap()/expect();
[PR 提交地址]
提交到 mega 仓库的 main 分支 orion/ 目录;
[开发指导]
- 认领任务参考 r2cn 开源实习计划 - 任务认领与确认;
- 开发前请先阅读 Antares API 文档(
scorpio/src/daemon/antares.rs中的文档注释); - 参考现有的
mount_fs()函数实现,了解 HTTP 请求和错误处理模式; - 建议先在本地启动 Scorpio 服务进行手动测试,再编写集成测试;
- 如遇到问题,可在 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 频道和导师交流。
- Quanyi Ma genedna@gmail.com
- Tianxing Ye yetianxing2014@gmail.com
[备注]
- 认领实习任务的同学,必须完成测试任务和注册流程,请参考: r2cn 开源实习计划 - 测试任务 和 r2cn 开源实习计划 - 学生注册与审核
- 本任务预计工作量:8-12 小时
- 建议先完成基本功能,再完善测试和文档
- 提交 PR 前请自行运行本地测试,确保代码质量
这个给周佳琪同学,让他帮忙坐下orion那边的对接