CacheCloud中Task任务执行过程

简介: CacheCloud中Task任务执行过程实质是先将task进行堆积到taskQueue中,然后进行统一多线程进行处理。

一、定时任务的生成执行过程

CacheCloud定时任务执行的过程,以taskServie为例:

首先指定需要执行的任务,也即task,然后才能执行定时任务。因此在CacheCloud中,可以看到定时任务的添加是在TaskService中的,可以看到有许多带add前缀的task任务。可以看到定时任务需要先提交到taskQueue中,然后经过taskService触发excuteNewTask,执行任务,此时会先查询还没执行的定时任务列表,找到未执行的定时任务,然后获取具体定时任务的执行步骤getTaskSteps,拿到之后,会拿到需要执行的若干步骤,就可以执行了。执行完成后,会更新taskQueue表中定时任务的状态。


二、定时任务的来源

比如部署应用的时候就会有addTask这个动作和提交检测

比如检测此时就会添加如下定时任务到taskQueue中等待taskService执行executeNewTask:

addAppScanKeyTask
addAppBigKeyTask
addAppIdleKeyTask
addAppHotKeyTask
addAppDelKeyTask
addAppScanCleanTask

以addAppBigKeyTask为例,com.sohu.cache.web.controller.AppToolController#submitDiagnostic可以看到需要经过:

更新审批信息
生成并保存taskqueue
更新task信息


三、TaskJob执行的过程

通过上下文拿到定时任务TaskService,执行taskService.executeNewTask()
获取任务队列列表是task是new状态的列表
循环任务队列,获取具体的task,更新task状态为准备执行READY
执行任务提交,然后拿到具体的task执行 future
获取具体的队列task,进行判断空和状态
更新队列task为正在执行RUNNING
获取任务步骤getTaskSteps
将相关task变成taskflow
设置task步骤信息放入到数据库 准备 TaskStepFlow    
遍历taskStepFlow
更新TaskQueue状态

taskStep的过程以AppDelKeyTask为例:

检查集群参数
创建delete key
等到delete key完成
工单审批

相关流程可以详见xmind:


目录
相关文章
|
4月前
crash命令 —— task
crash命令 —— task
|
调度 C语言 芯片
RT-Thread记录(二、RT-Thread内核启动流程 — 启动文件和源码分析)
今天就在前面我们RT-Thread Studio工程基础之上讲一讲RT-Thread内核启动流程
660 0
RT-Thread记录(二、RT-Thread内核启动流程 — 启动文件和源码分析)
[启动流程] RT-Thread是如何启动的?
[启动流程] RT-Thread是如何启动的?
|
存储 Java 编译器
进程和线程的区别&&run和start区别与联系
进程和线程的区别&&run和start区别与联系
妹子问我为啥启动线程时使用 start 而不是 run
今天团队里面的妹子问阿粉,为什么在启动线程的时候,都使用 start 方法,而不是 run 方法呢 还好阿粉平时一直有在学习,要不真的被妹子问住了 在多线程中,如果想让一个线程启动,你使用的方法一定是 thread.start() 方法,而不是 thread.run() 方法(啥,你用的不是 thread.start() 方法?乖,你的打开方式不对哦,下次不要这样了 有没有疑惑,为什么每次我们都习惯调用 start() 方法,为什么不直接调用 run() 方法来启动线程呢? 而且如果去看源码的话,你会发现,在 thread.start() 方法中,其实最后还是调用了 thread.ru
妹子问我为啥启动线程时使用 start 而不是 run
|
Docker 容器
Docker selenium自动化 - 执行程序没反应、不执行原因,强制处理之前失败的进程,“... requests waiting for a slot to be free“问题解决
Docker selenium自动化 - 执行程序没反应、不执行原因,强制处理之前失败的进程,“... requests waiting for a slot to be free“问题解决
376 0
Docker selenium自动化 - 执行程序没反应、不执行原因,强制处理之前失败的进程,“... requests waiting for a slot to be free“问题解决
|
C#
C#跟着阿笨玩一起玩异步Task实战(一)
一、课程介绍 本次分享课程属于《C#高级编程实战技能开发宝典课程系列》中的第一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集、整理和完善此系列课程! 本高级系列课程适合人群如下: 1、有一定的NET开发基础并对多线程技术有一定了解和认识。
1329 0
|
调度 开发者 编译器