镜像自地址
https://github.com/lhly/cloud-drive-renamer.git
已同步 2026-10-20 21:57:47 +08:00
3.3 KiB
3.3 KiB
P1 Enhancements Design (冲突检测 / 自适应节流 / 崩溃恢复)
Date: 2026-02-18
Goal
在当前扩展中补齐三项 P1 能力:
- 执行前的外部冲突检测 + 策略选择;
- 自适应节流(仅拉长请求间隔);
- 崩溃恢复流程在面板打开时可触达。
Scope
- 覆盖三项能力的 UI 交互与核心逻辑接入。
- 保持现有执行引擎并发语义不变。
- 不引入新平台适配或规则类型。
Non-goals
- 不调整最大并发(仅动态调整 requestInterval)。
- 不改变现有规则引擎与 preview 逻辑。
- 不引入新的 UI 页面,仅在现有面板内提示/弹窗。
Decisions
- 冲突检测采用“执行前统一检测 + 策略选择”。
- 自适应节流只拉长请求间隔,不调并发。
- 崩溃恢复在面板打开时自动检测并弹窗。
Architecture
1) 外部冲突检测(UI 执行前)
- 接入点:
file-selector-panel.ts的handleExecute()。 - 流程:
- 计算当前
selectedFiles+newNameMap。 - 调用
ConflictDetector.detectConflicts(files, newNames)。 - 若有冲突 -> 弹窗
showConflictResolutionDialog()选择策略。 - 根据策略
resolveConflicts(...)生成resolvedNames。 - 用
resolvedNames生成任务列表,并交给BatchExecutor执行。
- 计算当前
- 错误兜底:冲突检测失败时提示用户是否继续执行(默认取消)。
2) 自适应节流(BatchExecutor 内)
- 新增
adaptiveIntervalFactor(初始 1.0)。 waitForRequestSlot()使用requestInterval * factor作为实际间隔。- 在
processTask识别“限流/重试信号”时上调 factor(例如 x1.5, capped)。 - 识别策略:基于错误对象特征(如
code/errno、错误名或消息包含“TooManyRequests/429/频繁”等)。 - 可选回落:连续成功 N 次后缓慢回落 factor(保持稳定性)。
3) 崩溃恢复接入
- 面板打开时调用
initCrashRecovery(adapter)。 - 执行开始前调用
crashRecovery.saveOperationState写入任务与规则。 - 执行中根据进度调用
crashRecovery.markAsCompleted/markAsFailed。 - 执行完成/取消后
crashRecovery.clearOperationState。
Data Flow
冲突检测
用户点击执行
-> 构造 newNames
-> detectConflicts
-> showConflictResolutionDialog
-> resolveConflicts
-> BatchExecutor(tasks)
自适应节流
processTask -> detectBackoffSignal(error)
-> increase adaptiveIntervalFactor
-> waitForRequestSlot uses interval * factor
崩溃恢复
面板打开 -> initCrashRecovery(adapter)
执行开始 -> saveOperationState
执行中 -> markAsCompleted/markAsFailed
完成/取消 -> clearOperationState
Error Handling
- 冲突检测失败:提示“检测失败,是否继续执行?”默认取消。
- 策略选择取消:终止执行。
- 恢复失败:提示失败原因并清理恢复状态。
Testing Strategy (TDD)
- 新增单元测试:
- 冲突检测/策略解析生成的任务是否正确。
- 自适应节流:触发 backoff 信号后间隔增长。
- 回归:原有执行流程应保持一致(并发/暂停/取消不变)。
Rollout
- 功能在现有面板内呈现,无需迁移数据。
- 若出现问题,可通过配置开关回退(如将 backoff 逻辑禁用)。