引入版本控制后 Cadence 工作流不执行活动
Cadence workflow not executing activities after introducing versioning
我在 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 Cached state staled, new task has unexpected events {"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。
我收到的错误信息是
Cached state staled, new task has unexpected events
和
BadRequestError{Message: CadenceChangeVersion is not valid search
attribute}
你能帮我解决这个问题吗?
有两种可能:
- 您是运行版本低于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
中引入
这是为了帮助搜索工作流程更改版本。
如果这不正确,请告诉我。
我在 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 Cached state staled, new task has unexpected events {"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。
我收到的错误信息是
Cached state staled, new task has unexpected events
和
BadRequestError{Message: CadenceChangeVersion is not valid search attribute}
你能帮我解决这个问题吗?
有两种可能:
- 您是运行版本低于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
中引入这是为了帮助搜索工作流程更改版本。
如果这不正确,请告诉我。