修复错误后如何将失败/卡住的工作流程移至新版本?

时间:2020-06-17 22:57:32

标签: cadence-workflow temporal-workflow

我的理解是,如果Bug出现在Activity中,则将使用新代码,因为Activity没有版本概念。但是,如果工作流代码中存在错误并导致某些工作流失败(甚至更糟,不是失败而是被卡住),我们将修复该错误并部署新版本,但是那些失败的工作流将被卡在旧版本上。有没有一种方法可以自动将那些失败/卡住的工作流程移动到新版本并重新运行它们?

我们经常发生这种情况,因为我们刚刚开始学习使用Cadence / Temporal

提前谢谢!

1 个答案:

答案 0 :(得分:1)

这取决于错误。

对于导致工作流程卡住的错误(在默认情况下,nil指针取消引用会导致恐慌会阻止工作流程的进展),部署新版本的代码通常足以取消阻止它们。

如果错误修正需要向后不兼容的更改,那么最好的选择是将reset workflow移至错误之前。这样,工作流程将回滚并继续执行新代码。

对于由于新的不良构建而导致工作流代码损坏的情况,您可以将工作人员回滚到先前的构建,并将该构建标记为已损坏,并且所有工作流都会自动将其状态回滚到该构建之前。请参阅时间文档的“ Recovery from bad deployment”部分。

如果您正在使用ElasticSearch集成,则还可以使用谓词来选择多个符合某些条件的工作流,以对多个工作流进行批量重置。请参阅“ Signal, cancel, terminate workflows as a batch job”部分。除了该部分的名称之外,批处理作业也适用于重置操作。