From cc4bd7333122aa97dce0edea7983d31da5db90a3 Mon Sep 17 00:00:00 2001 From: Aditya Choudhari Date: Wed, 11 Feb 2026 10:38:36 -0800 Subject: [PATCH] chore: separate job dispatching from parent trace --- .../pkg/workspace/jobagents/argo/argoapp.go | 15 ++++++++++++--- .../workspace/jobagents/github/githubaction.go | 15 ++++++++++++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/apps/workspace-engine/pkg/workspace/jobagents/argo/argoapp.go b/apps/workspace-engine/pkg/workspace/jobagents/argo/argoapp.go index c829ac996..0827e1e00 100644 --- a/apps/workspace-engine/pkg/workspace/jobagents/argo/argoapp.go +++ b/apps/workspace-engine/pkg/workspace/jobagents/argo/argoapp.go @@ -27,8 +27,12 @@ import ( "github.com/avast/retry-go" "github.com/charmbracelet/log" "github.com/goccy/go-yaml" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/trace" ) +var tracer = otel.Tracer("workspace-engine/jobagents/argo") + var _ types.Dispatchable = &ArgoApplication{} type ArgoApplication struct { @@ -66,7 +70,12 @@ func (a *ArgoApplication) Dispatch(ctx context.Context, dispatchCtx types.Dispat a.makeApplicationK8sCompatible(app) go func() { - ctx := context.WithoutCancel(ctx) + parentSpanCtx := trace.SpanContextFromContext(ctx) + asyncCtx, span := tracer.Start(context.Background(), "ArgoApplication.AsyncDispatch", + trace.WithLinks(trace.Link{SpanContext: parentSpanCtx}), + ) + defer span.End() + ioCloser, appClient, err := a.getApplicationClient(serverAddr, apiKey) if err != nil { a.sendJobFailureEvent(dispatchCtx, fmt.Sprintf("failed to create ArgoCD client: %s", err.Error())) @@ -74,13 +83,13 @@ func (a *ArgoApplication) Dispatch(ctx context.Context, dispatchCtx types.Dispat } defer ioCloser.Close() - if err := a.upsertApplicationWithRetry(ctx, app, appClient); err != nil { + if err := a.upsertApplicationWithRetry(asyncCtx, app, appClient); err != nil { a.sendJobFailureEvent(dispatchCtx, fmt.Sprintf("failed to upsert application: %s", err.Error())) return } verification := newArgoApplicationVerification(a.verifications, dispatchCtx.Job, app.Name, serverAddr, apiKey) - if err := verification.StartVerification(ctx, dispatchCtx.Job); err != nil { + if err := verification.StartVerification(asyncCtx, dispatchCtx.Job); err != nil { a.sendJobFailureEvent(dispatchCtx, fmt.Sprintf("failed to start verification: %s", err.Error())) return } diff --git a/apps/workspace-engine/pkg/workspace/jobagents/github/githubaction.go b/apps/workspace-engine/pkg/workspace/jobagents/github/githubaction.go index 867f12f87..557fd7e42 100644 --- a/apps/workspace-engine/pkg/workspace/jobagents/github/githubaction.go +++ b/apps/workspace-engine/pkg/workspace/jobagents/github/githubaction.go @@ -16,8 +16,12 @@ import ( "github.com/golang-jwt/jwt/v4" "github.com/google/go-github/v66/github" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/trace" ) +var tracer = otel.Tracer("workspace-engine/jobagents/github") + var _ types.Dispatchable = &GithubAction{} type GithubAction struct { @@ -57,8 +61,13 @@ func (a *GithubAction) Dispatch(ctx context.Context, dispatchCtx types.DispatchC } go func() { - ctx := context.WithoutCancel(ctx) - if _, err := client.Actions.CreateWorkflowDispatchEventByID(ctx, cfg.Owner, cfg.Repo, cfg.WorkflowId, github.CreateWorkflowDispatchEventRequest{ + parentSpanCtx := trace.SpanContextFromContext(ctx) + asyncCtx, span := tracer.Start(context.Background(), "GithubAction.AsyncDispatch", + trace.WithLinks(trace.Link{SpanContext: parentSpanCtx}), + ) + defer span.End() + + if _, err := client.Actions.CreateWorkflowDispatchEventByID(asyncCtx, cfg.Owner, cfg.Repo, cfg.WorkflowId, github.CreateWorkflowDispatchEventRequest{ Ref: ref, Inputs: map[string]any{"job_id": dispatchCtx.Job.Id}, }); err != nil { @@ -66,7 +75,7 @@ func (a *GithubAction) Dispatch(ctx context.Context, dispatchCtx types.DispatchC dispatchCtx.Job.Status = oapi.JobStatusInvalidIntegration dispatchCtx.Job.UpdatedAt = time.Now() dispatchCtx.Job.Message = &message - a.store.Jobs.Upsert(ctx, dispatchCtx.Job) + a.store.Jobs.Upsert(asyncCtx, dispatchCtx.Job) } }()