diff --git a/pkg/server/conn.go b/pkg/server/conn.go index 177e4c203ac26..22407c9d20fad 100644 --- a/pkg/server/conn.go +++ b/pkg/server/conn.go @@ -1260,7 +1260,7 @@ func (cc *clientConn) dispatch(ctx context.Context, data []byte) error { cfg := config.GetGlobalConfig() if cfg.OpenTracing.Enable { var r tracing.Region - r, ctx = tracing.StartRegionEx(ctx, "server.dispatch") + r, ctx = tracing.StartRegionWithNewRootSpan(ctx, "server.dispatch") defer r.End() } diff --git a/pkg/util/tracing/util.go b/pkg/util/tracing/util.go index 4c45b61b322f4..74e4df97dfda6 100644 --- a/pkg/util/tracing/util.go +++ b/pkg/util/tracing/util.go @@ -73,6 +73,18 @@ func ChildSpanFromContxt(ctx context.Context, opName string) (opentracing.Span, return noopSpan(), ctx } +// StartRegionWithNewRootSpan return Region together with the context. +// It create and start a new span by globalTracer and store it into `ctx`. +func StartRegionWithNewRootSpan(ctx context.Context, regionType string) (Region, context.Context) { + span := opentracing.GlobalTracer().StartSpan(regionType) + r := Region{ + Region: trace.StartRegion(ctx, regionType), + Span: span, + } + ctx = opentracing.ContextWithSpan(ctx, span) + return r, ctx +} + // StartRegion provides better API, integrating both opentracing and runtime.trace facilities into one. // Recommended usage is //