@@ -74,27 +74,30 @@ type HandlerOptions struct {
7474 HTTPTraceProvider commonnexus.HTTPClientTraceProvider
7575}
7676
77- type completionHandler struct {
77+ type CompletionHandler struct {
7878 HandlerOptions
7979 clientVersionChecker headers.VersionChecker
8080 preProcessErrorsCounter metrics.CounterIface
8181}
8282
83+ func newCompletionHandler (options HandlerOptions ) * CompletionHandler {
84+ return & CompletionHandler {
85+ HandlerOptions : options ,
86+ clientVersionChecker : headers .NewDefaultVersionChecker (),
87+ preProcessErrorsCounter : options .MetricsHandler .Counter (metrics .NexusCompletionRequestPreProcessErrors .Name ()),
88+ }
89+ }
90+
8391// CompleteOperation implements nexus.CompletionHandler.
8492// nolint:revive // (cyclomatic complexity) This function is long but the complexity is justified.
85- func (h * completionHandler ) CompleteOperation (ctx context.Context , r * nexusrpc.CompletionRequest ) (retErr error ) {
93+ func (h * CompletionHandler ) CompleteOperation (ctx context.Context , r * nexusrpc.CompletionRequest ) (retErr error ) {
8694 startTime := time .Now ()
87- token , err := commonnexus .DecodeCallbackToken (r .HTTPRequest .Header .Get (commonnexus .CallbackTokenHeader ))
88- if err != nil {
89- h .Logger .Error ("failed to decode callback token" , tag .Error (err ))
90- return nexus .NewHandlerErrorf (nexus .HandlerErrorTypeBadRequest , "invalid callback token" )
91- }
92-
93- completion , err := h .CallbackTokenGenerator .DecodeCompletion (token )
94- if err != nil {
95- h .Logger .Error ("failed to decode completion from token" , tag .Error (err ))
95+ completion := r .CompletionToken
96+ if completion == nil {
97+ h .Logger .Error ("missing completion token" )
9698 return nexus .NewHandlerErrorf (nexus .HandlerErrorTypeBadRequest , "invalid callback token" )
9799 }
100+ var err error
98101 ns , err := h .NamespaceRegistry .GetNamespaceByID (namespace .ID (completion .NamespaceId ))
99102 if err != nil {
100103 h .Logger .Error ("failed to get namespace for nexus completion request" , tag .WorkflowNamespaceID (completion .NamespaceId ), tag .Error (err ))
@@ -112,7 +115,7 @@ func (h *completionHandler) CompleteOperation(ctx context.Context, r *nexusrpc.C
112115 tag .WorkflowRunID (completion .GetRunId ()),
113116 )
114117 rCtx := & requestContext {
115- completionHandler : h ,
118+ CompletionHandler : h ,
116119 namespace : ns ,
117120 workflowID : completion .GetWorkflowId (),
118121 logger : log .With (h .Logger , tag .WorkflowNamespace (ns .Name ().String ())),
@@ -229,7 +232,7 @@ func (h *completionHandler) CompleteOperation(ctx context.Context, r *nexusrpc.C
229232 return nil
230233}
231234
232- func (h * completionHandler ) forwardCompleteOperation (ctx context.Context , r * nexusrpc.CompletionRequest , rCtx * requestContext ) error {
235+ func (h * CompletionHandler ) forwardCompleteOperation (ctx context.Context , r * nexusrpc.CompletionRequest , rCtx * requestContext ) error {
233236 client , err := h .ForwardingClients .Get (rCtx .namespace .ActiveClusterName (rCtx .workflowID ))
234237 if err != nil {
235238 h .Logger .Error ("unable to get HTTP client for forward request" , tag .Operation (apiName ), tag .WorkflowNamespace (rCtx .namespace .Name ().String ()), tag .Error (err ), tag .SourceCluster (h .ClusterMetadata .GetCurrentClusterName ()), tag .TargetCluster (rCtx .namespace .ActiveClusterName (rCtx .workflowID )))
@@ -307,7 +310,7 @@ func (f *forwardingHTTPHeaderWrapper) Do(req *http.Request) (*http.Response, err
307310}
308311
309312type requestContext struct {
310- * completionHandler
313+ * CompletionHandler
311314 logger log.Logger
312315 metricsHandler metrics.Handler
313316 metricsHandlerForInterceptors metrics.Handler
0 commit comments