共计 858 个字符,预计需要花费 3 分钟才能阅读完成。
一、背景
EasyScheduler 升级 v1.1.0 后,进行任务测试,发现只能调度执行新的定时任务,而不能调度旧的定时任务。
二、那么问题来了
究竟是哪里出问题了?
- 1. 我的操作步骤出现了 bug?
- 2.EasyScheduler 官方的升级脚本有问题?
然而,从 v1.0.3 升级到 v1.1.0 完全是按照 https://dolphinscheduler.apache.org/en-us/docs/release/upgrade.html
官方手册进行操作的,所以操作步骤肯定没有问题。
经过和 EasyScheduler 负责人沟通后,确定是升级程序的一个 bug,使得定时任务 ID 和定时触发器关联失败, 导致旧的定时任务无法被调度。
那么问题发现了,该如何快速解决呢?有遇到同样问题的朋友,给出了一种方案,先手动下线定时器然后再手动上线即可恢复。但是这个显然不可行,上千个任务如何进行手动操作?但是为了确认有效性,通过测试了一个后,发现依然无效。最终 pass 该种方案。
经过分析,发现 EasyScheduler 调度定时任务主要用到的表为 qrtz_cron_triggers
,qrtz_job_details
,qrtz_triggers
。
解决方案也不麻烦,既然都关联错误了,那么直接全部清除上述三个表中数据,然后写个脚本程序,把所有项目工作流定时器进行下线再上线即可自动补全数据,这是目前最快速的解决方案。而官方修复该 bug 需要等到下一个版本发布,由于 EasyScheduler 贡献给了 apapche,第一个版本还需要等待 2~3 个多月才能发版,所以等待不是最佳选择。
三、总结
- 不要过分相信未经大量考研的开源产品,因为开源产品也和公司内部平台或者程序一样,都只是一套研发系统,需要经过千锤万打,才能方得始终
- 既然使用某个开源产品,就要知己知彼,方能百战不殆定位各种问题以及快速得出最佳解决方案
- 有一个为开源做贡献的心,每个平台起步都是艰辛的,需要我们的支持和滋养
最后,希望 EasyScheduler(现在的 DolphinScheduler)能够越来越好!
正文完