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

How to move failed / stuck workflow to new version after fixed bug?

我的理解是,如果bug是在Activity,就会使用新代码,因为Activity没有版本的概念。但是,如果 Workflow 代码中存在错误并导致某些工作流失败(或者更糟糕的是,不是失败而是卡住)怎么办,我们修复了错误并部署了新版本,但那些失败的工作流却卡在了旧版本上。有没有办法自动将那些失败/卡住的工作流移动到新版本并重新运行它们?

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

提前致谢!

这取决于错误。

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

如果错误修复需要向后不兼容的更改,那么最好的选择是 reset workflow 到错误之前的位置。这样工作流将回滚并继续通过新代码。

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

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