0

通过查看历史,我安排了一个活动任务,但从未执行(开始),然后工作流超时。我可以确认 cadence worker 正在运行,因为其他工作流程同时工作正常。

为什么活动没有在历史记录中启动/执行?我应该如何调查这样的问题?

我的活动超时与工作流超时相同。

问题来自this Github issue

4

1 回答 1

0

首先,带有重试的活动只会在活动完成或最终失败/超时时写入启动事件。

从历史中,可以将活动事件之前的工作流超时写入历史。您需要确保工作流超时大于活动超时,以便活动超时事件可以在工作流超时之前写入历史记录。

那么我们如何确定一个活动是否确实开始了呢?

  1. 当带有重试的活动正在运行时,查看状态的最佳方法是通过 CLI:
~/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 描述工作流视图,它显示待处理的活动。

  1. 如果您已完成 1. 确认活动未启动,那么我们需要查看任务列表和可用于任务列表的工作人员。
./cadence --do <> tl desc --tl <>

最后,重试活动背后的原因:历史需要作为不变性是不可变的,但是可以更改开始事件以使活动重试,直到它最终稳定下来。这种不变性对于 Cadence 架构很重要。但这在 webUI 中确实令人困惑。这是改进它的问题。

于 2020-12-02T17:42:07.830 回答