指定超时前的 DecisionTaskTimedOut

DecisionTaskTimedOut before the specified timeout

我有一个案例,当超时设置为 10 时,决策在 5 秒后超时:

  17  2019-06-13T17:46:59Z  DecisionTaskScheduled     {TaskList:{Name:maxim-C02XD0AAJGH6:db09fd84-98bf-4546-a0d8-fb51e30c2b41},
                                                      StartToCloseTimeoutSeconds:10, Attempt:0}
  18  2019-06-13T17:47:04Z  DecisionTaskTimedOut      {ScheduledEventId:17,
                                                      StartedEventId:0,
                                                      TimeoutType:SCHEDULE_TO_START}
10:49 AM

它在本地 docker 使用 Cadence 服务 运行,我可以可靠地重现它。

5 秒超时是由于 Cadence Sticky Execution 功能造成的。粘性执行在 Cadence Worker 上默认启用,它允许在响应决策后将工作流状态缓存在 worker 上。这允许 Cadence 服务器直接将新的决策任务分派给同一个工作人员,从而允许重用缓存状态并产生新的决策,而无需重播整个执行历史。

决定 SCHEDULE_TO_START 超时已到位,以允许在工作人员重新启动并且工作流的粘性任务列表上没有轮询器时将决定发送给另一个工作人员执行。这会导致 Cadence 服务器清除粘性,以便将执行和决策分派到原始任务列表,以便它可以被任何其他工作人员拾取。

// Optional: Sticky schedule to start timeout.
// default: 5s
// The resolution is seconds. See details about StickyExecution on the comments for DisableStickyExecution.
StickyScheduleToStartTimeout time.Duration