runtime: tracing: End root span at end of trace

The root span should exist the duration of the trace. Defer ending span
until the end of the trace instead of end of function. Add the span to
the service struct to do so.

Fixes #4902

Signed-off-by: Chelsea Mafrica <chelsea.e.mafrica@intel.com>
This commit is contained in:
Chelsea Mafrica 2022-08-12 10:35:10 -07:00
parent 97b7fe438a
commit fcc1e0c617
2 changed files with 7 additions and 3 deletions

View File

@ -97,9 +97,10 @@ func create(ctx context.Context, s *service, r *taskAPI.CreateTaskRequest) (*con
} }
// create root span // create root span
// rootSpan will be ended when the entire trace is ended
rootSpan, newCtx := katatrace.Trace(s.ctx, shimLog, "rootSpan", shimTracingTags) rootSpan, newCtx := katatrace.Trace(s.ctx, shimLog, "rootSpan", shimTracingTags)
s.rootCtx = newCtx s.rootCtx = newCtx
defer rootSpan.End() s.rootSpan = rootSpan
// create span // create span
span, newCtx := katatrace.Trace(s.rootCtx, shimLog, "create", shimTracingTags) span, newCtx := katatrace.Trace(s.rootCtx, shimLog, "create", shimTracingTags)

View File

@ -28,6 +28,7 @@ import (
"github.com/opencontainers/runtime-spec/specs-go" "github.com/opencontainers/runtime-spec/specs-go"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
otelTrace "go.opentelemetry.io/otel/trace"
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils" "github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
@ -122,8 +123,9 @@ type exit struct {
type service struct { type service struct {
sandbox vc.VCSandbox sandbox vc.VCSandbox
ctx context.Context ctx context.Context
rootCtx context.Context // root context for tracing rootCtx context.Context // root context for tracing
rootSpan otelTrace.Span
containers map[string]*container containers map[string]*container
@ -946,6 +948,7 @@ func (s *service) Shutdown(ctx context.Context, r *taskAPI.ShutdownRequest) (_ *
s.mu.Unlock() s.mu.Unlock()
span.End() span.End()
s.rootSpan.End()
katatrace.StopTracing(s.rootCtx) katatrace.StopTracing(s.rootCtx)
return empty, nil return empty, nil