conductor server端源码解析(2)-更新任务信息(mysql实现)

1.执行时机

客户端一个worker执行完成后,会调用该方法更新空中的数据信息
com.netflix.conductor.rest.controllers.TaskResource#updateTask
客户端会将worker的执行结果TaskResult回写到server端

2.核心方法

com.netflix.conductor.core.execution.WorkflowExecutor#updateTask
在这里插入图片描述

2.1 查询流程信息:

com.netflix.conductor.core.dal.ExecutionDAOFacade#getWorkflowModel
→ com.netflix.conductor.core.dal.ExecutionDAOFacade#getWorkflowModelFromDataStore
在这里插入图片描述

//查询表中流程信息
SELECT json_data FROM workflow WHERE workflow_id = ?
 
//若还需要查询流程中的任务(此流程中不需要)
SELECT task_id FROM workflow_to_task WHERE workflow_id = ?

若流程为“终止”状态,则删除队列中的信息,方法直接返回
com.netflix.conductor.dao.QueueDAO#remove

DELETE FROM queue_message WHERE queue_name = ? AND message_id = ?

2.2 查询任务信息:

com.netflix.conductor.core.dal.ExecutionDAOFacade#getTaskModel

SELECT json_data FROM task WHERE task_id = ?

若任务为“终止”状态,则删除队列中的信息,方法直接返回
com.netflix.conductor.dao.QueueDAO#remove

2.3 更新task的数据

  • 若任务不是系统任务,且任务结果TaskResult为“IN_PROGRESS”,则将任务设置为“SCHEDULED” 状态
  • 其它情况,将任务设置为TaskResult的状态

之后,将其它信息更新至task对象;
调用接口 com.netflix.conductor.core.dal.ExecutionDAOFacade#updateTask 将数据回写至库中

方法:com.netflix.conductor.mysql.dao.MySQLExecutionDAO#insertOrUpdateTaskData
数据存在则更新:UPDATE task SET json_data=?, modified_on=CURRENT_TIMESTAMP WHERE task_id=?
数据不存在则插入:INSERT INTO task (task_id, json_data, modified_on) VALUES (?, ?, CURRENT_TIMESTAMP) ON DUPLICATE KEY UPDATE json_data=VALUES(json_data), modified_on=VALUES(modified_on)
 
若任务状态为“终止态”
方法:com.netflix.conductor.mysql.dao.MySQLExecutionDAO#insertOrUpdateTaskData
DELETE FROM task_in_progress WHERE task_def_name = ? AND task_id = ?
 
更新表 workflow_to_task  中的任务状态
方法:com.netflix.conductor.mysql.dao.MySQLExecutionDAO#addWorkflowToTaskMapping
INSERT IGNORE INTO workflow_to_task (workflow_id, task_id) VALUES (?, ?)

2.4 根据task的状态更新queue中信息

若状态为“TIMED_OUT”,则删除queue中的信息: com.netflix.conductor.dao.QueueDAO#remove
若状态为“SCHEDULED”,则推迟队列中的消息:com.netflix.conductor.dao.QueueDAO#postpone

2.5 更新流程数据

com.netflix.conductor.core.execution.WorkflowExecutor#isLazyEvaluateWorkflow

以下3中情况被判定为可延迟计算:

  • 当前任务不是DO-WHILE类型的任务
  • 当前任务属于FORK-JOIN中的分支中的任务
  • 当前任务属于FORK_JOIN_DYNAMIC分支中的任务

2.5.2 若延迟计算则…

com.netflix.conductor.core.execution.WorkflowExecutor#expediteLazyWorkflowEvaluation
将workId插入到 decider queue 中
在这里插入图片描述
com.netflix.conductor.dao.QueueDAO#postpone
com.netflix.conductor.mysql.dao.MySQLQueueDAO#pushMessage

2.5.3 若不能延迟计算则…

com.netflix.conductor.core.execution.WorkflowExecutor#decide(java.lang.String)
在这里插入图片描述
查询流程信息: com.netflix.conductor.dao.ExecutionDAO#getWorkflow(java.lang.String, boolean)

SELECT json_data FROM workflow WHERE workflow_id = ?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值