From f30ed8521d13aff0115c429f4313429152da8dd3 Mon Sep 17 00:00:00 2001 From: Ian Cottrell Date: Sat, 7 Mar 2020 18:12:58 -0500 Subject: [PATCH] internal/telemetry: change detach to be an event deliver detach to the exporter as an event rather than hard coding the span detach behavior. Change-Id: I87b6e2a3596fea338908c11ba0b219176b6305bf Reviewed-on: https://go-review.googlesource.com/c/tools/+/222542 Reviewed-by: Robert Findley --- internal/telemetry/event.go | 1 + internal/telemetry/export/trace.go | 8 ++------ internal/telemetry/trace/trace.go | 5 ++++- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/telemetry/event.go b/internal/telemetry/event.go index df202665fa..5b2d226f9c 100644 --- a/internal/telemetry/event.go +++ b/internal/telemetry/event.go @@ -16,6 +16,7 @@ const ( EventStartSpan EventEndSpan EventTag + EventDetach ) type Event struct { diff --git a/internal/telemetry/export/trace.go b/internal/telemetry/export/trace.go index bf28285f20..9f15a4689b 100644 --- a/internal/telemetry/export/trace.go +++ b/internal/telemetry/export/trace.go @@ -70,16 +70,12 @@ func ContextSpan(ctx context.Context, event telemetry.Event) context.Context { if span := GetSpan(ctx); span != nil { span.Finish = event.At } + case telemetry.EventDetach: + return context.WithValue(ctx, spanContextKey, nil) } return ctx } -// Detach returns a context without an associated span. -// This allows the creation of spans that are not children of the current span. -func Detach(ctx context.Context) context.Context { - return context.WithValue(ctx, spanContextKey, nil) -} - func (s *SpanContext) Format(f fmt.State, r rune) { fmt.Fprintf(f, "%v:%v", s.TraceID, s.SpanID) } diff --git a/internal/telemetry/trace/trace.go b/internal/telemetry/trace/trace.go index 603b0bcb7c..3ffe0ad2da 100644 --- a/internal/telemetry/trace/trace.go +++ b/internal/telemetry/trace/trace.go @@ -31,5 +31,8 @@ func StartSpan(ctx context.Context, name string, tags ...telemetry.Tag) (context // Detach returns a context without an associated span. // This allows the creation of spans that are not children of the current span. func Detach(ctx context.Context) context.Context { - return export.Detach(ctx) + return export.ProcessEvent(ctx, telemetry.Event{ + Type: telemetry.EventDetach, + At: time.Now(), + }) }