本文章经授权转载

ds出现秒级调度任务的处理流程 10行代码,在ds的前端做crontab表达式限制的魔改方案
DS如何执行一个工作流

command对应t_escheduler_command表 1.2.0-command对应t_ds_command表 master扫描线程获取command,进行dag切分,然后将task到zk上的task队列 task队列的znode是/escheduler/tasks_queue 1.2.0对应/dolphinscheduler/tasks_queue worker Fetch线程从task队列中拉取task进行执行
秒级任务应对操作
停止秒级别的定时任务,下线

将ds的服务暂时停掉
运行ds安装目录/bin/stop_all.sh

查看t_escheduler_command表积累了多少数据,如果没有必要,删除 将所有的流程实例和任务实例的状态都变为终态
#将流程和任务实例的状态都变为终态
SELECT * FROM t_escheduler_process_instance WHERE state = 0
#查询出来执行delete操作
SELECT * FROM t_escheduler_process_instance WHERE state = 1
#state状态=1的可以保留也可以删除,保留就将其状态变为6,失败状态,
#然后把对应的task_instance非终态的任务也置为6
#建议直接干掉
删除zk上任务队列znode上积压的数据
#ds-1.1.0
delete /escheduler/tasks_queue
#ds-1.2.0
delete /dolphinscheduler/tasks_queue
重启ds的所有服务

开发环境搭建
安装node v8.9.4 webstorm clone ds 代码 前端开发文档 https://dolphinscheduler.apache.org/zh-cn/docs/1.2.0/user_doc/frontend-development.html
代码修改
src/js/conf/home/pages/projects/pages/definition/list/_source/timing.vue

let crontabExp = this.crontab.split(" ")
let second = crontabExp[0]
let minutes = crontabExp[1]
if (second === '*' || minutes === '*') {
this.$message.warning('$(i18n.$t('Crontab Exp Second/Minutes is eq *'))')
return false
}
将Crontab Exp Second/Minutes is eq *添加到en_US.js和zh_CN.js中


效果验证
npm run build, 将生成的dist文件夹覆盖nginx上的前端资源文件 自从把crontab表达式限制之后,秒级任务这种刺激的事情再也没出现过!!!

小结
)crontab的默认值的秒位和分钟位已经在ds-1.2.0中改为了0, 这个问题的出现概率低了很多。建议在ds的web端加异常crontab表达式的限制代码,毕竟本事大不如不耽着嘛
!!!
欢迎试用Dolphin Scheduler-1.2.1!!!
文章转载自海豚调度,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




