486
wtFailedShouldCreateNewTask := false
487
if wtFailedCause != nil {
488
>
effects.Cancel(ctx)
api.go
489
>
490
>
// Abort all Updates with explicit reason, to prevent them to be aborted with generic
491
>
// registryClearedErr, which may lead to continuous retries of UpdateWorkflowExecution API.
492
>
updateRegistry.Abort(update.AbortReasonWorkflowTaskFailed)
493
>
494
>
metrics.FailedWorkflowTasksCounter.With(handler.metricsHandler).Record(
495
>
1,
496
>
metrics.OperationTag(metrics.HistoryRespondWorkflowTaskCompletedScope),
497
>
metrics.NamespaceTag(namespaceEntry.Name().String()),
498
>
metrics.VersioningBehaviorTag(ms.GetEffectiveVersioningBehavior()),
499
>
metrics.FailureTag(wtFailedCause.failedCause.String()),
500
>
metrics.FirstAttemptTag(currentWorkflowTask.Attempt),
501
>
)
502
>
handler.logger.Info("Failing the workflow task.",
503
>
tag.Value(wtFailedCause.Message()),
504
>
tag.WorkflowID(token.GetWorkflowId()),
505
>
tag.WorkflowRunID(token.GetRunId()),
506
>
tag.WorkflowNamespaceID(namespaceEntry.ID().String()),
507
>
tag.Attempt(currentWorkflowTask.Attempt),
508
>
tag.Cause(wtFailedCause.failedCause.String()),
509
>
)
510
>
if currentWorkflowTask.Attempt > 1 && wtFailedCause.failedCause != enumspb.WORKFLOW_TASK_FAILED_CAUSE_UNHANDLED_COMMAND {
511
// drop this workflow task if it keeps failing. This will cause the workflow task to timeout and get retried after timeout.
512
return nil, serviceerror.NewInvalidArgument(wtFailedCause.Message())
513
}
514
515
>
ms, _, err = failWorkflowTask(ctx, handler.shardContext, weContext, currentWorkflowTask, wtFailedCause, request)
api.go
516
>
if err != nil {
517
return nil, err
518
}
519
>
wtFailedShouldCreateNewTask = true
api.go
520
>
newMutableState = nil
521
>
522
>
if wtFailedCause.terminateWorkflow {
523
// Flush buffer event before terminating the workflow
524
ms.FlushBufferedEvents()