fix(scan): 扫描失败后 5 分钟冷却期,避免每次请求都重试
CI / Backend tests (push) Canceled after 0s
CI / Frontend build (push) Canceled after 0s

ensureScan 检查 lastErrorAt,冷却期内不触发懒扫描,防止 storage 持续异常时 CPU 飙升。手动 POST /api/scan 不受冷却限制,用户可随时手动重试。扫描成功后清除 lastErrorAt 解除冷却。
This commit is contained in:
yinjun.chen1
2026-09-22 09:33:11 +08:00
parent 6e311c7d0d
commit 7cc1cdb42e
+10
View File
@@ -115,6 +115,8 @@ async function runScanAsync() {
})
rawCacheAt = new Date().toISOString()
scanState.done = true
scanState.error = null
scanState.lastErrorAt = null // 成功后清除错误状态,解除冷却
scanState.finishedAt = rawCacheAt
scanState.diskBytes = await diskBytesOf(storage) // 磁盘占用(跨平台字节和)
console.log('[scan] 完成 ' + JSON.stringify({
@@ -140,10 +142,18 @@ rawCacheAt = new Date().toISOString()
}
}
// 扫描失败后冷却期:避免持续异常(目录权限/挂载问题)时每次请求都触发扫描
const SCAN_RETRY_COOLDOWN_MS = 5 * 60_000 // 5 分钟
// 确保扫描已启动(缓存缺失时懒触发,不阻塞当前请求)
function ensureScan() {
if (isDemoMode()) return
if (rawCache || scanState.scanning) return
// 失败冷却期内不重试,手动 POST /api/scan 不受此限制
if (scanState.lastErrorAt) {
const elapsed = Date.now() - new Date(scanState.lastErrorAt).getTime()
if (elapsed < SCAN_RETRY_COOLDOWN_MS) return
}
runScanAsync()
}