Skip to content

🐛 [P1] 存量永假 cron job 毒化整轮调度刷新——PR#445 feasibility 校验的升级回归 #452

Description

@CavinHuang

背景

PR #445(已合入 main @ fb6dddc)为 validateAutomationSchedule 新增 cronDateFeasible 永假组合短路并「创建即拒」,但未考虑存量数据升级路径

问题

#408 的用户可能已有持久化的永假 cron job(旧版 validate 放行、nextRunAt 存 null)。升级后:

  • automation-runner-service.ts:331scheduleJobjob.nextRunAt ?? getNextAutomationRunAt(...) —— 后者内部调 validate 现含 feasibility throw
  • scheduleJob / refreshAutomationRunnerJobs(:360-367) 均无 try/catch,且 refresh clearSchedules() 再遍历

后果:一个坏 job 令整轮刷新中断——其余全部 job 定时器被清且不再补;startAutomationRunner await 失败连带 routine 条目调度失败;每次 refresh 复现。旧版同路径只慢不抛,属升级回归。

建议(任选其一或组合)

  1. feasibility 检查只放创建/改期入口(create/updateJob 已显式调用处);getNextAutomationRunAt 对存量坏表达式返 null(跳过调度而非抛)
  2. scheduleJob 逐 job 隔离异常(单 job 失败不影响其余)
  3. 迁移时对存量 job 跑一次 feasibility 清洗

另注意相关语义矛盾(PR#445 遗留):matchCronExpression dom/dow 同限取 AND,新增 cronDateFeasible 假设 OR——0 9 31 2 1 类表达式 feasible 判 true 但实际永假,逐分钟空转卡顿在该类上未修复,两边必须统一。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions