Skip to content

feat(cache): add temp file caching for retry in copy/move tasks (only baidu_netdisk & quark_uc)#1612

Closed
jenfonro wants to merge 9 commits intoOpenListTeam:mainfrom
jenfonro:cache
Closed

feat(cache): add temp file caching for retry in copy/move tasks (only baidu_netdisk & quark_uc)#1612
jenfonro wants to merge 9 commits intoOpenListTeam:mainfrom
jenfonro:cache

Conversation

@jenfonro
Copy link
Copy Markdown
Contributor

@jenfonro jenfonro commented Nov 10, 2025

Description / 描述

  • 增加了临时文件的控制,现在当上传失败时,可以复用下载成功的文件,实现加快重试
  • 同时缓存了md5,避免重复io
  1. 通用缓存 (internal/fs/cache/upload_cache.go)
  • UploadMetadata 只包含通用字段:文件大小、分片大小、整文件 MD5/SHA 等;驱动自定义的数据。
  • .meta 文件以任务 ID生成;
  • MarkRetainMetadata/ShouldRetainMetadata 允许驱动声明“失败后也保留 .meta”,方便后续手动重试。
  1. 任务层行为 (internal/fs/copy_move.go)
  • 自动重试阶段保留临时文件和 .meta;只有在重试次数耗尽且驱动未声明 retainMeta 时才清理 .meta。
  • 成功后删除临时文件,并在驱动未指定 retainMeta 时清理 .meta。
  1. 驱动适配

3.1 百度网盘

  • 必须缓存 block list、content/slice MD5 及上传域名。驱动在 UploadCache 中存取这些数据,
    并在失败时调用 MarkRetainMetadata(),确保 .meta 在手动重试前一直存在。
  • 重试时若命中 .meta,直接复用 block list/MD5/上传域名,避免重复下载和断点续传逻辑丢失。

3.2 Quark/UC

  • 无断点续传,仅需要复用整文件 MD5/SHA1。
  • 不调用 MarkRetainMetadata(),因此重试耗尽后 .meta 会被清除;手动重试会重新下载并生成新的 .meta。

Motivation and Context / 背景

目前的任务中,当下载成功,上传失败时,重试时会重新下载

How Has This Been Tested? / 测试

  • 远程存储上传至百度云盘/夸克云盘,在下载/上传阶段手动失败,关注临时文件的变动(上传阶段观察网络下行更直观)

Checklist / 检查清单

  • I have read the CONTRIBUTING document.
    我已阅读 CONTRIBUTING 文档。
  • I have formatted my code with go fmt or prettier.
    我已使用 go fmtprettier 格式化提交的代码。
  • I have added appropriate labels to this PR (or mentioned needed labels in the description if lacking permissions).
    我已为此 PR 添加了适当的标签(如无权限或需要的标签不存在,请在描述中说明,管理员将后续处理)。
  • I have requested review from relevant code authors using the "Request review" feature when applicable.
    我已在适当情况下使用"Request review"功能请求相关代码作者进行审查。
  • I have updated the repository accordingly (If it’s needed).
    我已相应更新了相关仓库(若适用)。

@jenfonro
Copy link
Copy Markdown
Contributor Author

@j2rong4cn 大佬有空再看看呗

目前能想到的是,

  • 能复用的数据全部一并缓存
  • 每个驱动都可以缓存不一样的数据
  • 可以根据驱动适配保留.meta,直至程序重启后生效

@j2rong4cn
Copy link
Copy Markdown
Member

别改了,我以后写个更好的

@jenfonro jenfonro closed this Nov 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants