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:


目录
相关文章
|
Shell 数据安全/隐私保护
执行jobs命令查看不到任务的原因终于找到了
背景 执行nohup command &后,断开终端,执行jobs命令查看不到任务的原因,终于找到了。 首先执行完如下步骤: 1.nohup scp user@server:path/file localpath 2.输入密码 3.按Ctrl+Z挂起当前进程 4.使用命令bg让挂起的进程继续运行
|
4月前
crash命令 —— task
crash命令 —— task
|
消息中间件
celery--调用异步任务的三种方法和task参数
celery--调用异步任务的三种方法和task参数
妹子问我为啥启动线程时使用 start 而不是 run
今天团队里面的妹子问阿粉,为什么在启动线程的时候,都使用 start 方法,而不是 run 方法呢 还好阿粉平时一直有在学习,要不真的被妹子问住了 在多线程中,如果想让一个线程启动,你使用的方法一定是 thread.start() 方法,而不是 thread.run() 方法(啥,你用的不是 thread.start() 方法?乖,你的打开方式不对哦,下次不要这样了 有没有疑惑,为什么每次我们都习惯调用 start() 方法,为什么不直接调用 run() 方法来启动线程呢? 而且如果去看源码的话,你会发现,在 thread.start() 方法中,其实最后还是调用了 thread.ru
妹子问我为啥启动线程时使用 start 而不是 run
|
监控 安全 网络协议
[知识小节]Process Monitor介绍(上)
[知识小节]Process Monitor介绍
1225 0
[知识小节]Process Monitor介绍(上)
|
存储 监控 安全
[知识小节]Process Monitor介绍(下)
[知识小节]Process Monitor介绍
1120 0
[知识小节]Process Monitor介绍(下)
|
Docker 容器
Docker selenium自动化 - 执行程序没反应、不执行原因,强制处理之前失败的进程,“... requests waiting for a slot to be free“问题解决
Docker selenium自动化 - 执行程序没反应、不执行原因,强制处理之前失败的进程,“... requests waiting for a slot to be free“问题解决
378 0
Docker selenium自动化 - 执行程序没反应、不执行原因,强制处理之前失败的进程,“... requests waiting for a slot to be free“问题解决
|
SQL 安全
二十三:从库的SQL 线程(MTS协调线程)和sql_slave_skip_counter参数(笔记)
一、调用流程大概如下 handle_slave_sql ->是否开启了slave_preserve_commit_order和log_slave_updates参数,开启的话需要设置提交顺序管理器 if (opt_slave_preserve_commit_order && rli->op...
1060 0
Giraph源码分析(四)—— Master 如何检查Worker启动成功
本文的目的 说明Giraph如何借助ZooKeeper来实现Master与Workers间的同步(不太确定)。 环境 在单机上(机器名:giraphx)启动了2个workers。 Giraph遵从单Master多Workers结构,BSPServiceMaster使用MasterThread线程来进行全局的同步。

热门文章

最新文章

下一篇
开通oss服务