You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

19 lines
1.7 KiB

# 07 — 失败处理 + 定时重试
**What to build:** 缩略图生成失败后的重试与恢复机制。`ThumbnailGenerationTask` 的生成逻辑包裹 try-catch:捕获异常时 `thumbnail_retry_count++`,若 `retry_count < retry-limit`(默认 3)则保持 `PENDING` 状态等待重试,等于 3 则置 `FAILED`。新建 `ThumbnailRetryTask`(@Scheduled,cron 走 `crm.file.thumbnail.retry-cron` 默认每天凌晨 4 点),扫描 `thumbnail_status = FAILED` 的记录,重置为 `PENDING` 并重新提交异步生成任务。`getThumbnail` 遇到 `FAILED` 状态时返回占位图 + `no-cache`(已由 02 实现)。完成后即使 LibreOffice 临时故障导致生成失败,定时任务会在故障恢复后自动重试。
**Blocked by:** 03 — 图片异步生成
**Status:** ready-for-agent
- [x] `ThumbnailGenerationTask` 生成逻辑 try-catch:异常时 retry_count++,小于 retry-limit 保持 PENDING,等于则置 FAILED
- [x] 生成成功后 retry_count 归零(与 03 的成功路径一致,本票确认行为)
- [x] `ThumbnailRetryTask` 新建(@Scheduled cron = `${crm.file.thumbnail.retry-cron:0 0 4 * * ?}`
- [x] 重试任务扫描 `thumbnail_status = FAILED` 的记录 → 重置 PENDING → 重新提交异步生成
- [x] 重试任务异常不致命(try-catch 包裹,日志告警,下个周期重试,复用 OrphanChunkCleanupTask 模式)
- [x] 测试:生成失败 + retry_count < 3 retry_count++,状态保持 PENDING
- [x] 测试:生成失败 + retry_count = 3 → 状态置 FAILED
- [x] 测试:生成成功 → retry_count 归零
- [x] 测试:ThumbnailRetryTask 扫描 FAILED 记录 → 重置 PENDING + 提交异步任务
- [x] 测试:重试任务自身异常不 crash(日志告警,下周期继续)