feat(task): persist task timestamps across restarts - #2914
Conversation
Co-Authored-By: OpenAI Codex <noreply@openai.com>
pikachuren
left a comment
There was a problem hiding this comment.
🙏 感谢 @fryeggs 提交!
🤖 AI 自动审核声明:本评审报告由 AI 自动生成,当前使用 Claude Opus 5 模型进行分析。
🎯 结论
✅ 建议 Approve(由维护者人工确认)— 改动小而准,且补了迁移兼容测试
📖 概要
feat(task): persist task timestamps across restarts · 让任务的开始/结束时间在重启后不丢失。
核心改动:TaskExtension 的 startTime / endTime 由私有字段改为导出字段并加 JSON tag,配套新增反序列化兼容测试。
🧭 整体方案
根因很清晰:私有字段不会被 encoding/json 序列化,任务持久化后时间戳自然丢失。改为导出字段 + json:"start_time,omitempty" 是最直接的解法,且通过保留原有 getter/setter 方法签名,对调用方完全透明,方案干净。
📊 变更统计
2 个文件(+72 / -7 行) | 功能 ⭐⭐⭐⭐⭐ | 最小改动 ⭐⭐⭐⭐⭐ | 前向兼容 ⭐⭐⭐⭐ | 方案设计 ⭐⭐⭐⭐⭐
🚨 关键问题
P0(阻塞合并):无
P1(建议修复):无
P2(可选):
- 💡 字段由私有改为导出后,外部包可绕过 setter 直接赋值,封装性略有削弱。这是 Go 里为 JSON 序列化常见的取舍,可接受;若想两者兼得也可实现
MarshalJSON/UnmarshalJSON保持字段私有,但样板代码会多不少,个人倾向当前写法~ - 💡 新增的
TestMigratedCopyTaskRecoversNativeFields覆盖了旧数据反序列化、creator 恢复、retry 延迟初始化、groupID 重建等多方面,质量不错。是否顺带补一个「新写入 → 读回」的往返测试,确保序列化方向也正确呢? - 💡 存量任务数据中没有
start_time/end_time,反序列化后为nil。得益于omitempty与指针类型不会 panic,前端展示为空即可,属于可接受行为,仅作记录~
📂 逐文件分析
internal/task/base.go
改动意图:让时间戳参与 JSON 序列化。
代码逻辑:startTime/endTime → StartTime/EndTime 并加 tag;四个 getter/setter 同步更新内部引用。
问题分析:改动完整,方法签名未变、调用方无需改动,ClearEndTime 也已同步。无问题。
internal/fs/copy_queue_persistence_test.go
改动意图:验证旧格式任务数据能正确恢复。
问题分析:用真实历史 JSON 结构做反序列化断言,覆盖面好,是本 PR 的加分项。
✅ 待处理清单
- 建议补充一个序列化往返(marshal → unmarshal)测试
- 合并后确认存量任务重启后展示正常(时间为空但不报错)
🎯 结论:✅ 建议 Approve — 根因准确、改动最小、测试到位,无阻塞项。
|
需要确认P2的问题是否有影响 |
Summary / 摘要
This PR makes task start/end timestamps part of the persisted task representation so copy tasks can recover their visible timing information after a normal restart or container recreation. It also adds a regression test covering native task unmarshalling and recovery fields.
本 PR 将任务开始/结束时间纳入持久化任务表示,使复制任务在正常重启或容器重建后能够恢复可见的时间信息,并增加原生任务反序列化与恢复字段的回归测试。
start_time/end_timefields; older payloads remain readable.Related repository PRs / 关联仓库 PR:
Testing / 测试
go test ./internal/fs -run '^TestMigratedCopyTaskRecoversNativeFields$' -count=1go test ./...— the current upstream baseline still has unrelated failures in several drivers under the current Go toolchain, an environment-dependentinternal/nettransport assertion, and aria2 RPC tests when no local aria2 service is running.Checklist / 检查清单
gofmtorgo fmt.AI Disclosure / AI 使用声明
Tools used / 使用工具:
Usage scope / 使用范围:
Code generation / 代码生成
Refactoring / 重构
Tests / 测试
Review assistance / 审查辅助
I have reviewed and validated all AI-assisted content included in this PR.
I have ensured that this AI-assisted commit includes
Co-Authored-Byattribution.I can reproduce the checked behavior from the committed source and test commands without relying on hidden runtime state.