我的理解是,如果bug在Activity中,由于Activity没有版本的概念,所以会使用新的代码。但是如果工作流代码中存在错误并导致某些工作流失败(或者更糟糕的是,不是失败而是卡住了)怎么办,我们修复了错误并部署了新版本,但那些失败的工作流卡在旧版本上。有没有办法自动将那些失败/卡住的工作流程移动到新版本并重新运行它们?
这在我们身上发生了很多,因为我们刚刚开始学习使用 Cadence/Temporal
先感谢您!
我的理解是,如果bug在Activity中,由于Activity没有版本的概念,所以会使用新的代码。但是如果工作流代码中存在错误并导致某些工作流失败(或者更糟糕的是,不是失败而是卡住了)怎么办,我们修复了错误并部署了新版本,但那些失败的工作流卡在旧版本上。有没有办法自动将那些失败/卡住的工作流程移动到新版本并重新运行它们?
这在我们身上发生了很多,因为我们刚刚开始学习使用 Cadence/Temporal
先感谢您!
这取决于错误。
对于导致工作流卡住的错误(在 Go 中,取消引用 nil 指针会导致恐慌,默认情况下会阻塞工作流进度)部署新版本的代码通常足以解除阻塞。
如果错误修复需要向后不兼容的更改,那么最好的选择是将工作流程重置到错误之前的位置。这样,工作流程将回滚并继续执行新代码。
对于由新的错误构建导致工作流代码中断的情况,您可以将工作人员回滚到先前的构建并将该构建标记为已损坏,并且所有工作流将自动将其状态回滚到该构建之前的状态。请参阅临时文档的“从错误部署中恢复”部分。
如果您正在使用 ElasticSearch 集成,那么您还可以使用谓词对多个工作流执行批量重置,以选择符合某些条件的工作流。请参阅“作为批处理作业发出信号、取消、终止工作流”部分。除了部分的名称之外,批处理作业也适用于重置操作。