fix(scan): 扫描失败后 5 分钟冷却期,避免每次请求都重试
ensureScan 检查 lastErrorAt,冷却期内不触发懒扫描,防止 storage 持续异常时 CPU 飙升。手动 POST /api/scan 不受冷却限制,用户可随时手动重试。扫描成功后清除 lastErrorAt 解除冷却。
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user