Skip to content

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

@genedna

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

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions