Skip to content

[r2cn] 修复 Scorpio 稳定性等问题 #1814

Description

@genedna

[任务] 修复 Scorpio:稳定 Antares 挂载/退出流程、修正 Dicfuse parent.children 一致性,并支持可配置 HTTP 绑定地址

[任务分值] 15 分

[背景描述]

在当前 Mega 的 scorpio 组件中,Antares(FUSE/overlay + Dicfuse)在以下场景容易出现不稳定或行为不一致:

  • 挂载时序问题:Dicfuse 目录树尚未完全初始化时就开始 FUSE/Antares 流程,可能导致挂载失败或访问异常。
  • overlay 层级遮蔽问题:CL(可选工作区层)与 Dicfuse 层的优先级不合理时,可能意外遮蔽主视图。
  • 持久化恢复后一致性问题:DB/索引恢复后可能出现“path→inode 存在但 parent.children 缺失”的不一致,影响目录枚举/遍历。
  • HTTP 服务不可配置:daemon HTTP bind 地址/端口写死,容器/宿主环境端口映射变化时难以对齐;并且退出时缺少优雅 shutdown,可能遗留挂载或资源未清理。

本任务目标是把上述问题系统化修复,提升 scorpio 在本地、容器及 CI 场景下的可用性与稳定性。

[需求描述]

  • 1) 稳定 Antares/Dicfuse 初始化与挂载

    • 对 root path(/)和非 root path 的 Dicfuse 获取逻辑增加“等待 ready”机制,设置合理超时(如 120s),超时需返回明确错误信息(英文)。
    • 调整 overlay lower layers 组合策略,确保:
      • Dicfuse 作为主 lower layer
      • CL dir(如存在)作为“附加层”,不应遮蔽 Dicfuse 主视图(保持 best-effort)
  • 2) 修复 Dicfuse parent.children 一致性

    • 在类似 upsert_inode 的路径/节点写入逻辑中,处理“inode 已存在但 parent.children 缺失”的场景:
      • persistent_path_store 中 parent 存在且不包含该 inode,需补写 children 关系,避免恢复后状态不一致。
    • 增加对应的单元测试/回归测试(覆盖恢复场景)。
  • 3) 支持可配置 HTTP bind address(CLI + 容器透传)

    • scorpio 增加 CLI 参数:--http-addr <ip:port>,默认 0.0.0.0:2725
    • 更新 docker/dev-image/entrypoint.sh.env.example
      • 新增环境变量(示例):SCORPIO_HTTP_ADDR=0.0.0.0:2725
      • 若用户已显式传入 --http-addr,脚本不得重复追加同名 flag
      • 需要确保 SCORPIO_API_BASE_URL 在 worker 内与端口覆盖一致(至少正确解析 IPv4 ip:port,IPv6 情况允许文档提示手动设置)
  • 4) 退出与清理

    • HTTP server 需要支持 graceful shutdown(例如 oneshot 通道触发)。
    • shutdown 时触发 Antares 清理逻辑(如 shutdown_cleanup_impl),并设置超时保护(例如 15s)。
    • main 退出流程应保证:
      • 先停 HTTP daemon(触发清理)
      • 再处理 FUSE unmount(避免挂载残留/脏状态)
    • 同时兼容 Unix 的 SIGTERM/SIGINT 与非 Unix 的 ctrl-c。

[代码标准]

  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 开源实习计划 - 学生注册与审核

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions