[任务] 排查 Git 对象未写入 S3 的原因并区分对象缺失与异常请求场景
[任务分值] 20 分
[背景描述]
在 Mega 系统中,Git 对象(如 blob / tree / commit / pack 等)在接收后需要被持久化存储到 S3 兼容的 Object Store 中,以保证:
- Git 数据的可靠性与可恢复性
- 后续构建、同步与历史回溯能力
近期发现存在如下异常现象:
- 部分 Git 对象在访问时 无法从 S3 中读取
- 目前系统无法明确区分:
- 对象从未成功写入 S3
- 对象曾存在但被错误删除
- 请求本身就是一个不存在的 Git 对象(非法或重复请求)
导致的问题包括:
- 上游服务无法准确判断错误类型
- 前端 / 调用方只能收到模糊的 404 / 500
- 排障成本高,难以定位是写入问题还是读取问题
因此,需要对 Git 对象写入与读取流程进行系统性排查,并在接口与日志层面 明确区分“对象不存在”与“系统异常” 两类情况
[需求描述]
- 排查 Git 对象未写入 S3 的原因
-
回溯 Git 对象写入流程:
- 接收 Git 请求
- 对象解析 / 校验
- 写入 S3 的实际调用
-
排查可能的问题点:
- 写入失败但未正确上报错误
- 异步写入流程丢失
- 重试 / 超时处理不完整
- 对象被错误覆盖或跳过
- 区分“对象不存在”与“写入异常”
- 在对象读取路径中明确区分:
- 对不同情况返回明确语义:
- 正常对象不存在 → 明确 404(或业务态码)
- 系统异常 / 写入失败 → 明确错误码与错误信息
[代码标准]
- 所有 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 开源实习计划 - 学生注册与审核
[任务] 排查 Git 对象未写入 S3 的原因并区分对象缺失与异常请求场景
[任务分值] 20 分
[背景描述]
在 Mega 系统中,Git 对象(如 blob / tree / commit / pack 等)在接收后需要被持久化存储到 S3 兼容的 Object Store 中,以保证:
近期发现存在如下异常现象:
导致的问题包括:
因此,需要对 Git 对象写入与读取流程进行系统性排查,并在接口与日志层面 明确区分“对象不存在”与“系统异常” 两类情况
[需求描述]
回溯 Git 对象写入流程:
排查可能的问题点:
[代码标准]
Signed-off-by和 使用GPG签名,即提交代码时(使用git commit命令时)至少使用-s -S两个参数,参考 Contributing Guide;GitHub Actions自动化测试,提交 PR 后请关注GitHub Actions结果;[PR 提交地址] 提交到 mega 仓库的
main分支 `` 目录;[开发指导]
[导师及邮箱] 请申请此题目的同学使用邮件联系导师,或加入到 R2CN Discord 后在
#p-meta频道和导师交流。[备注]