通过查看历史,我安排了一个活动任务,但从未执行(开始),然后工作流超时。我可以确认 cadence worker 正在运行,因为其他工作流程同时工作正常。
为什么活动没有在历史记录中启动/执行?我应该如何调查这样的问题?
我的活动超时与工作流超时相同。
问题来自this Github issue。
通过查看历史,我安排了一个活动任务,但从未执行(开始),然后工作流超时。我可以确认 cadence worker 正在运行,因为其他工作流程同时工作正常。
为什么活动没有在历史记录中启动/执行?我应该如何调查这样的问题?
我的活动超时与工作流超时相同。
问题来自this Github issue。
首先,带有重试的活动只会在活动完成或最终失败/超时时写入启动事件。
从历史中,可以将活动事件之前的工作流超时写入历史。您需要确保工作流超时大于活动超时,以便活动超时事件可以在工作流超时之前写入历史记录。
那么我们如何确定一个活动是否确实开始了呢?
~/cadence [qlong-cli-wf-show-actvities-retry] M % ./cadence --do qlong wf show -w retry_db345b68-0e50-4c24-8d2d-8c6dd18d88dc
1 WorkflowExecutionStarted {WorkflowType:{Name:main.retryWorkflow},
TaskList:{Name:retryactivityGroup}, Input:[],
ExecutionStartToCloseTimeoutSeconds:120,
TaskStartToCloseTimeoutSeconds:60,
ContinuedFailureDetails:[], LastCompletionResult:[],
OriginalExecutionRunId:63acf35f-9ede-48ef-aee7-66579382fed5,
Identity:35027@IT-USA-25920@,
...
...
...
...
ExpirationIntervalInSeconds:20},
Header:{Fields:map{}}}
============Pending activities============
[
{
"ActivityID": "0",
"ActivityType": {
"name": "main.batchProcessingActivity"
},
"State": "STARTED",
"LastStartedTimestamp": "2020-10-11T22:47:16-07:00",
"LastHeartbeatTimestamp": "2020-10-11T22:47:16-07:00",
"Attempt": 0,
"MaximumAttempts": 15,
"ExpirationTimestamp": "2020-10-11T22:47:36-07:00"
}
]
NOTE: ActivityStartedEvent with retry policy will be written into history when the activity is finished.
或者通过 webUI 描述工作流视图,它显示待处理的活动。
./cadence --do <> tl desc --tl <>
最后,重试活动背后的原因:历史需要作为不变性是不可变的,但是可以更改开始事件以使活动重试,直到它最终稳定下来。这种不变性对于 Cadence 架构很重要。但这在 webUI 中确实令人困惑。这是改进它的问题。