States¶
注意
代码在转换过程中包含明确的检查,使用下面描述的模型。这些检查确保转换有效,如果确定转换无效,则转换代码将引发 InvalidState 异常。通常,触发此异常意味着代码中存在某种错误,或者发生了某种类型的错误使用/状态违规,应报告为这种情况。
Engine¶
RESUMING - 准备流程和原子恢复执行。
SCHEDULING - 调度并提交原子进行处理。
WAITING - 等待原子完成执行。
ANALYZING - 分析和处理原子完成的结果。
SUCCESS - 成功完成。
FAILURE - 完成失败。
REVERTED - 诱导了回滚,并且所有原子都没有成功完成。
SUSPENDED - 运行过程中暂停。
UNDEFINED - 内部状态。
GAME_OVER - 内部状态。
Flow¶
PENDING - 流程启动(或通过 reset())在其生命周期中处于此状态(它在由引擎运行之前没有状态,因为流程只是定义其内容语义和顺序的模式,并且流程只有在执行时才获得状态)。
RUNNING - 在此状态下,运行流程的引擎会遍历流程。
SUCCESS - 在流程的所有原子都成功完成之后过渡到此状态。
REVERTED - 在流程的所有原子在失败后成功回滚之后过渡到此状态。
FAILURE - 如果在单次失败后或多次失败后(并行运行时可能发生多次失败)无法回滚,则引擎会将流程过渡到此状态。
SUSPENDING - 在 RUNNING 状态下,运行流程的引擎可以暂停。发生这种情况时,引擎会尝试立即将流程过渡到 SUSPENDING 状态。在该状态下,运行流程的引擎等待正在运行的原子完成(因为引擎无法抢占正在主动运行的原子)。
SUSPENDED - 当没有原子正在运行时,并且到目前为止所有结果都已保存时,引擎会将流程从 SUSPENDING 状态过渡到 SUSPENDED 状态。
注意
如果所有原子实际上都在运行(并且已完成)暂停请求能够被响应(由于缺乏抢占),或者如果引擎正在回滚并且所有原子在引擎等待正在运行的原子完成时已被回滚,或者如果原子正在运行或已被回滚并且其中一些原子失败,则引擎可以将流程过渡到 SUCCESS 状态(从 SUSPENDING 状态)或 REVERTED 状态或 FAILURE 状态。
RESUMING - 当运行流程的引擎以“困难的方式”中断(例如服务器崩溃)时,它可以从存储中加载到任何状态(这是必需的,因为无法知道上次成功保存的状态是什么)。如果加载的状态不是 PENDING(即流程从未运行)或 SUCCESS、FAILURE 或 REVERTED(在这种情况下,流程已经完成),则流程会设置为 RESUMING 状态,在从后端存储(数据库、文件系统…)加载时,会保持很短的时间(此转换未在图表中显示)。当流程最终加载后,它会进入 SUSPENDED 状态。
从 SUCCESS、FAILURE 或 REVERTED 状态,流程可以再次运行;因此,允许立即返回到 RUNNING 状态。此转换的一个可能用例是允许更改流程或与先前运行的流程相关的流程详细信息,并且客户端代码希望确保此新(可能已更新)流程的每个原子都有机会运行。
Task¶
PENDING - 任务在其生命周期中从这个状态开始(它在由引擎运行之前没有状态,因为任务只是表示如何完成某项工作的对象)。一旦它被引擎过渡到 PENDING 状态,这意味着它可以立即执行,或者如果需要,将等待它所依赖的所有原子完成。
注意
运行任务的引擎也会在任务被回滚并且其包含的流程被重新启动或重试后,将任务过渡到 PENDING 状态。
IGNORE - 当做出跳过(不执行)任务的条件决策时,引擎会将任务过渡到 IGNORE 状态。
RUNNING - 当运行任务的引擎开始执行任务时,引擎会将任务过渡到 RUNNING 状态,并且任务将保持在此状态直到任务的 execute() 方法返回。
SUCCESS - 运行任务的引擎在任务成功完成(即在运行其 execute() 方法期间未引发任何异常)后,将任务过渡到此状态。
FAILURE - 运行任务的引擎在任务以错误完成(即在运行其 execute() 方法期间引发了异常)后,将任务过渡到此状态。
REVERT_FAILURE - 运行任务的引擎在任务以错误完成(即在运行其 revert() 方法期间引发了异常)后,将任务过渡到此状态。
REVERTING - 运行任务的引擎在正在运行的流程开始回滚并且其 revert() 方法被调用时,将任务过渡到此状态。只有处于 SUCCESS 或 FAILURE 状态的任务才能被回滚。如果此方法失败(即引发异常),则任务进入 REVERT_FAILURE 状态。
REVERTED - 运行任务的引擎在成功回滚任务(即在运行其 revert() 方法期间未引发任何异常)后,将任务过渡到此状态。
Retry¶
注意
重试具有与任务相同的状态,以及一个额外的状态。
PENDING - 重试在其生命周期中从这个状态开始(它在由引擎运行之前没有状态,因为重试只是表示如何重试相关流程的对象)。一旦它被引擎过渡到 PENDING 状态,这意味着它可以立即执行,或者如果需要,将等待它所依赖的所有原子完成(在重试的情况下,当流程中发生故障时,将通过咨询其 on_failure() 方法来咨询重试对象)。
注意
运行重试的引擎也会在重试被回滚并且其关联的流程被重新启动或重试后,将重试过渡到 PENDING 状态。
IGNORE - 当做出跳过(不执行)重试的条件决策时,引擎会将重试过渡到 IGNORE 状态。
RUNNING - 当引擎开始执行重试时,引擎会将重试过渡到 RUNNING 状态,并且重试将保持在此状态直到其 execute() 方法返回。
SUCCESS - 运行重试的引擎在它成功完成(即在执行期间未引发任何异常)后,将其过渡到此状态。
FAILURE - 运行重试的引擎在它以错误完成(即在运行其 execute() 方法期间引发了异常)后,将重试过渡到此状态。
REVERT_FAILURE - 运行重试的引擎在它以错误完成(即在运行其 revert() 方法期间引发了异常)后,将重试过渡到此状态。
REVERTING - 运行重试的引擎在正在运行的流程开始回滚它并且其 revert() 方法被调用时,将过渡到此状态。只有处于 SUCCESS 或 FAILURE 状态的重试才能被回滚。如果此方法失败(即引发异常),则重试进入 REVERT_FAILURE 状态。
REVERTED - 运行重试的引擎在成功回滚重试(即在运行其 revert() 方法期间未引发任何异常)后,将重试过渡到此状态。
RETRYING - 如果与当前重试关联的流程失败并回滚,则引擎准备流程进行下一次运行并将重试过渡到 RETRYING 状态。
Jobs¶
UNCLAIMED - 具有关于要完成的工作细节的作业最初由某个发布实体发布,供其他实体(例如 conductor)进行处理。这也可以是当拥有实体手动放弃(或丢失)先前声明的作业的所有权时进入的状态。
CLAIMED - 某个实体主动拥有的作业;通常,所有权通过某种临时连接绑定到作业的持久数据,以便如果该临时连接丢失(通常是自动的或在一段时间后),则作业所有权丢失。
COMPLETE - 作业中定义的工作已由其拥有实体完成,并且作业不再可以处理(并且在将来某个/任何时间点可能被删除)。