Browse Source

fix(redis): 按分钟执行的间隔任务不再生成窗口外的策略 key

上一提交(移除 KEYS 全库扫描)把"清理窗口外策略 key"的动作从"每个执行时刻一次"提到
"每个任务一次"。但按分钟执行的间隔任务,其 exeTimes 由 getExecTimesByMinute 生成到
次日 00:00,会超出任务配置的 intervalEndTime:原先每次存 key 前的清理会把窗口外的 key
删掉(除最后一次外),提取到循环外之后这些窗口外的 key 会全部留存,导致调度器在配置
窗口之外仍然执行任务。

本提交在按分钟执行的循环内补上守卫:晚于 intervalEndTime 的时刻直接跳过,既不清理也不
生成策略 key,与"只保留 finalDate 之内的策略 key"的原意保持一致(按小时执行的 exeTimes
本来就以 intervalEndTime 为界,不受影响)。
master
wangguangyuan 2 weeks ago
parent
commit
57f652637f
1 changed files with 4 additions and 0 deletions
  1. +4
    -0
      inspect-main/inspect-main-task-exec/src/main/java/com/inspect/exec/controller/PatrolTaskExecController.java

+ 4
- 0
inspect-main/inspect-main-task-exec/src/main/java/com/inspect/exec/controller/PatrolTaskExecController.java View File

@ -593,6 +593,10 @@ public class PatrolTaskExecController extends BaseController {
// Date date = exeTimes.get(exeTimes.size() - 1);
cleanTaskKeysAfter(task, task.getIntervalEndTime());
for (Date exeTime : exeTimes) {
// 晚于 intervalEndTime 的时刻不生成策略 key保持"只保留 finalDate 之内的 key"的原意
if (task.getIntervalEndTime() != null && exeTime.after(task.getIntervalEndTime())) {
continue;
}
task.setFixedStartTime(exeTime);
final String taskType = "INTER-BY-MINUTE";
parseTaskToRedis(taskType, task);


Loading…
Cancel
Save