cadence-workflow - 引入版本控制后,Cadence 工作流不执行活动
问题描述
我在 cadence 工作流中引入了 cadence 版本控制,之后工作流在版本控制引入点停止执行。我收到以下错误:
2020-10-29T07:23:49.587Z DEBUG internal/internal_event_handlers.go:465 ExecuteActivity {“Domain”:“domain_1”,“TaskList”:“tasklist_1”,“WorkerID”:“6@cdnc-5ddb9ccbb5-5dt5j@tasklist ”,“WorkflowType”:“do_work_workflow”,“WorkflowID”:“CREATE”,“RunID”:“cab97b65-9892-48c5-b842-3f8b462d8602”,“ActivityID”:“4”,“ActivityType”:“do_Task_D”} 2020-10-29T07:23:49.620Z DEBUG internal/internal_task_handlers.go:1077 缓存状态已过时,新任务有意外事件 {“Domain”:“domain_1”,“TaskList”:“tasklist_1”,“WorkerID”:“6 @cdnc-5ddb9ccbb5-5dt5j@tasklist1", "WorkflowID": "CREATE", "RunID": "cab97b65-9892-48c5-b842-3f8b462d8602”,“CachedPreviousStartedEventID”:30,“TaskFirstEventID”:22,“TaskStartedEventID”:30,“TaskPreviousStartedEventID”:21}
我的工作流程代码将如下所示:
func doWorkflow(ctx workflow.Context, input string) error {
err := doTaskA(input)
if err != nil {
return err
}
err = doTaskB(input)
if err != nil {
return err
}
versionTaskC := workflow.GetVersion(ctx, "ChangeID", workflow.DefaultVersion, 1)
if versionTaskC == workflow.DefaultVersion {
err = doTaskC(input)
if err != nil {
return err
}
} else {
err = doTaskD(input)
if err != nil {
return err
}
}
err = doTaskD2(input)
if err != nil {
return err
}
err = doTaskD3(input)
if err != nil {
return err
}
return nil
}
在 ChangeID 处,返回的版本为 1,工作流尝试执行 TaskD,但它没有执行它,它陷入了无限循环,试图执行 TaskD。
我得到的错误信息是
缓存状态过时,新任务有意外事件
和
BadRequestError{消息:CadenceChangeVersion 不是有效的搜索属性}
你能帮我解决这个问题吗?
解决方案
有两种可能:
- 您正在运行版本低于 0.11 的 Cadence 服务器。
- [很有可能]您的 Cadence 服务器从较低版本升级但没有更改 elasticSearch 架构:
cadence admin cluster add-search-attr --search_attr_key CadenceChangeVersion --search_attr_type 1
您可能还需要添加以下内容:
cadence admin cluster add-search-attr --search_attr_key BinaryChecksums --search_attr_type 1
背景:
CadenceChangeVersion 介绍在https://github.com/uber/cadence/releases/tag/v0.11.0
这是为了帮助搜索工作流更改版本。
让我知道这是否不正确。
推荐阅读
- javascript - 正则表达式允许以下符号
- ios - UIDocumentInteractioncontroller PDF 在圈导航栏上滚动和打印预览
- android - 默认电话 - 如何在通话过程中选择号码服务?
- python - python从一列查找列表并从不同列返回等效的ID
- c# - ServiceStack IContainerAdapter适配Autofac 5.2.0版本
- react-native - React Native,在 UseEffect 中调度后如何使用 Redux 存储?
- codeigniter - CI4中如何访问Helper Functions中的数据库
- c# - 来自多个地方的传入数据问题,在 msg..problem 之后可以输入唯一 ID
- flutter - 一旦开始拖动,是否真的不可能取消可拖动的颤振?
- javascript - 特殊的立即调用的函数将变量保留在原位