Skip to content

[r2cn] 修复 perform_mount_task 在未正确解析 dicfuse 路径时创建临时目录的问题 #1534

@genedna

Description

@genedna

[任务] 修复 perform_mount_task 在未正确解析 dicfuse 路径时创建临时目录的问题

[任务分值] 20 分

[背景描述] 当前 perform_mount_task 函数在执行挂载时,如果 dicfuse 层未能获取到指定路径对应的 inode,会自动调用 add_temp_point() 创建一个临时挂载点。
此行为在 buck2 等需要临时挂载的场景下是预期的,但在 scorpio 的正常挂载流程中可能导致非预期的临时目录被创建。例如,当上层请求挂载一个深层路径(如 /repo/a/b/c)但 dicfuse 尚未加载到对应层级时,系统会生成一个“temp”节点而不是返回错误,导致后续文件系统视图不一致。

[需求描述] 重构 perform_mount_task 的路径处理逻辑:

  1. 当 dicfuse 未找到目标路径的 inode 时,判断当前请求是否属于临时挂载(如 buck2 流程)。
  2. 若为普通挂载请求(如 scorpio 挂载),应返回明确的错误(例如 "Mount path not found in dicfuse"),而非默认创建 temp_point。
  3. 确保错误日志中包含 mono_path 信息,便于定位问题。
  4. 为此行为添加单元测试与集成测试,覆盖:
    • 找到 inode 的正常路径;
    • 临时挂载模式(buck2);
    • 未找到 inode 且应报错的普通挂载。

[代码标准]

  1. 所有 PR 提交必须签署 Signed-off-by 和 使用 GPG 签名,即提交代码时(使用 git commit 命令时)至少使用 -s -S 两个参数,参考 Contributing Guide
  2. 所有 PR 提交必须通过 GitHub Actions 自动化测试,提交 PR 后请关注 GitHub Actions 结果;
  3. 代码注释均需要使用英文;

[PR 提交地址] 提交到 mega 仓库的 main 分支 scorpio/src/fuse 目录;

[开发指导]

  1. 认领任务参考 r2cn 开源实习计划 - 任务认领与确认;

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

  1. Quanyi Ma [email protected]
  2. Tianxing Ye [email protected]

[备注]

  1. 认领实习任务的同学,必须完成测试任务和注册流程,请参考: r2cn 开源实习计划 - 测试任务r2cn 开源实习计划 - 学生注册与审核
  2. 建议同时阅读 dicfuse/store.rs 与 add_temp_point 的实现,理解其目录创建逻辑与 inode 分配策略

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions