137
}
138
140
>
defer cancel()
141
>
142
>
traceCtx := invocationTraceContext{
143
>
operationTag: "CancelOperation",
144
>
namespaceName: ns.Name().String(),
145
>
targetNamespaceID: endpoint.GetEndpoint().GetSpec().GetTarget().GetWorker().GetNamespaceId(),
146
>
requestID: args.requestID,
147
>
operation: args.operation,
148
>
endpointName: args.endpointName,
149
>
workflowID: cancelRef.BusinessID,
150
>
runID: cancelRef.RunID,
151
>
attemptStart: args.currentTime.UTC(),
152
>
attempt: task.GetAttempt(),
153
>
}
154
>
155
>
inv, err := h.newInvocation(
156
>
callCtx, ns, endpoint, args.endpointName, args.service,
157
>
callTimeout, timeoutType, traceCtx,
158
>
)
159
>
if err != nil {
160
return fmt.Errorf("failed to construct invocation: %w", err)
161
}
162
>
startTime := time.Now() // nolint:forbidigo // Time can be used for timing metrics.
cancellation_tasks.go
163
>
callErr := inv.Cancel(callCtx, args, nexus.CancelOperationOptions{Header: nexus.Header(args.headers)})
164
>
failureSource := failureSourceFromContext(callCtx)
165
>
166
>
h.recordCallOutcome(endpoint, cancelCallOutcomeTag(callCtx, callErr), callErr, time.Since(startTime), failureSource, traceCtx)
167
>
168
>
saveErr := h.saveCancellationResult(ctx, cancelRef, callErr)
169
>
170
>
if callErr != nil && isDestinationDown(callErr) {
171
saveErr = queueserrors.NewDestinationDownError(callErr.Error(), saveErr)
172
}
173
175
}
176