task-30: getTaskPollBackoffMs 递增序列

getTaskPollBackoffMs 签名改为 attempt 可选(省略视为 0,向后兼容),
序列 500×factor^attempt、封顶 maxMs 行为由任务 29 的 factor 配置驱动。
新增 8 个测试:attempt0/1/2 值、序列单调、封顶、省略参数默认、
负 attempt 当 0、自定义 factor。
This commit is contained in:
2026-08-31 20:16:30 +08:00
parent 37eabcbb2e
commit 9e224929fb
2 changed files with 63 additions and 3 deletions
@@ -66,9 +66,9 @@ export function getTaskProgressCacheTtlMs() {
return TASK_PROGRESS_VISIBLE_CACHE_MILLIS;
}
/** 第 attempt 次退避延迟:base × factor^attempt,封顶 maxattempt 非法时按首次(0)处理 */
export function getTaskPollBackoffMs(attempt: number) {
const safe = Number.isFinite(attempt) && attempt > 0 ? Math.floor(attempt) : 0;
/** 第 attempt 次退避延迟:base × factor^attempt,封顶 maxattempt 省略/非法时按首次(0)处理 */
export function getTaskPollBackoffMs(attempt?: number) {
const safe = Number.isFinite(attempt) && (attempt as number) > 0 ? Math.floor(attempt as number) : 0;
const factor = getTaskPollBackoffFactor();
const scaled = config.backoffBaseMs * Math.pow(factor, safe);
return scaled > config.backoffMaxMs ? config.backoffMaxMs : scaled;