任务状态管控
平台中的任务状态可以区分为:
实例状态 Case Status
标识当前运行实例的运行状态,可能状态有:
实例状态 | 备注 |
---|---|
NotStart | 通过init_exec_case方法初始化实例后,创建的实例的状态 |
Processing | 当前实例处于运行中,即隶属于它的子任务中有处于运行状态 (Processing) ,且没有失败 (Failed) 或被取消 (Cancelled) 的子任务 |
Pending | 隶属的子任务中含有需要用户在界面进行交互的任务,运行暂停且等待用户交互的状态 |
Cancelling | 当前实例正在被取消,且部分子任务还没完成取消操作 |
Cancelled | 当前实例被取消了,且所有子任务都已经停止运行 |
Failed | 隶属的子任务中含有执行失败 (Failed) ,数据校验失败 (ValidationFailed) ,人工审核失败 (AuditFailed),当前实例任务将不再继续运行 |
Completed | 所有隶属子任务均运行成功 (Completed) 或忽略 (Cancelled),实例运行结束 |
任务状态 Task Status
标识当前实例中包含的任务的运行状态,可能包含的状态有:
任务状态 | 备注 |
---|---|
(blank) | 通过initiate_exec_case方法初始化任务清单时的初始化状态,或case被cancel后的状态 (清空) |
NotStart | 任务通过get_next_task_list方法获取任务清单后的状态,说明当前任务准备好了,可以交由slaver进行执行 |
Processing | 正在运行的任务状态 (执行中) |
Ready | 需要用户界面交互的任务状态,如等待用户文件上传 |
Pending | 需要用户界面交互的任务状态,如等待用户审批 |
Cancelling | 标识当前子任务正在取消中,具体的Slaver服务还没有完成响应和停止运行的处理过程 |
Cancelled | 当前任务被取消,或隶属的实例被取消,且当前slaver服务已经确实完成取消处理 |
ValidationFailed | 当前任务结果未通过数据逻辑校验,校验失败了 |
AuditFailed | 当前任务未能通过人工审核,或当前结果被人工拒绝。(不同于审批里面的Reject) |
Failed | 当前任务失败了,多因为slaver在支持中产生了执行失败任务。 |
Ignore | 当前任务未满足预置前提,但又允许被忽略,或和逻辑跳转功能 (LogicSwitch) 配合时,跳过当前任务不需要执行,该状态被认为是完成状态 |
Completed | 当前任务顺利执行完成了 (执行成功) |
状态操作 Task Operation
-
启动实例时 SpecialCase:
- 初次启动时,所有隶属子任务状态为 (blank) ,即为空状态
- 随着任务定义的序列,依次运行。(NotStart) -> (Ready) / (Processing) -> (Completed) / (Failed) / (Ignore) / (ValidateFailed)
- 同时,实例本身的状态为 (Processing)
-
取消实例运行 Cancel:
- 取消一个正在运行的实例时,不影响已经完成 (Completed) 或失败 (Failed) 子任务的状态
- 正在运行的子任务,会先设置为 (Cancelling) 状态,然后等待该任务真实取消或完成该任务的执行后,由该任务将当前自己的任务状态修改成 (Completed) 或 (Cancelled)
- 实例本身的状态也会转变成失败状态 (Cancelled)
-
重新运行实例 Re-run
- 重新运行一个已完成 (Completed) 或 已失败 (Failed)的实例时,会区别对待。
- 针对已完成的实例,重新运行时,会重置所有非系统任务(用户自定义任务),即状态由 (Completed) / (Ignore) -> (blank)
- 针对一个已经失败 (Failed) 的实例时,已经完成的子任务状态将不受影响,仅仅将失败的 (Failed) 或取消的 (Cancelled) 的子任务进行重置 (blank) 。
- 重置子任务状态后,将转由调度 (Schedule Service)调度运行。同时,实例任务状态切换为 (Processing)