runtime: use root span for shimv2 tracing

Add rootCtx to service struct in shimv2 to use as parent of spans
created in shimv2 for a more organized trace ouput.

Fixes #1355

Signed-off-by: Chelsea Mafrica <chelsea.e.mafrica@intel.com>
This commit is contained in:
Chelsea Mafrica 2021-02-20 17:27:49 -08:00
parent 6b0dc60dda
commit 9e4932a6e2
2 changed files with 24 additions and 18 deletions

View File

@ -73,9 +73,14 @@ func create(ctx context.Context, s *service, r *taskAPI.CreateTaskRequest) (*con
return nil, err
}
// create root span
var rootSpan otelTrace.Span
rootSpan, s.rootCtx = trace(s.ctx, "root span")
defer rootSpan.End()
// create span
var span otelTrace.Span
span, s.ctx = trace(ctx, "create")
span, s.ctx = trace(s.rootCtx, "create")
defer span.End()
if rootFs.Mounted, err = checkAndMount(s, r); err != nil {

View File

@ -125,6 +125,7 @@ type service struct {
pid uint32
ctx context.Context
rootCtx context.Context // root context for tracing
sandbox vc.VCSandbox
containers map[string]*container
config *oci.RuntimeConfig
@ -300,7 +301,7 @@ func trace(ctx context.Context, name string) (otelTrace.Span, context.Context) {
}
func (s *service) Cleanup(ctx context.Context) (_ *taskAPI.DeleteResponse, err error) {
span, ctx := trace(ctx, "Cleanup")
span, ctx := trace(s.rootCtx, "Cleanup")
defer span.End()
//Since the binary cleanup will return the DeleteResponse from stdout to
@ -411,7 +412,7 @@ func (s *service) Create(ctx context.Context, r *taskAPI.CreateTaskRequest) (_ *
// Start a process
func (s *service) Start(ctx context.Context, r *taskAPI.StartRequest) (_ *taskAPI.StartResponse, err error) {
span, ctx := trace(ctx, "Start")
span, ctx := trace(s.rootCtx, "Start")
defer span.End()
start := time.Now()
@ -462,7 +463,7 @@ func (s *service) Start(ctx context.Context, r *taskAPI.StartRequest) (_ *taskAP
// Delete the initial process and container
func (s *service) Delete(ctx context.Context, r *taskAPI.DeleteRequest) (_ *taskAPI.DeleteResponse, err error) {
span, ctx := trace(ctx, "Delete")
span, ctx := trace(s.rootCtx, "Delete")
defer span.End()
start := time.Now()
@ -514,7 +515,7 @@ func (s *service) Delete(ctx context.Context, r *taskAPI.DeleteRequest) (_ *task
// Exec an additional process inside the container
func (s *service) Exec(ctx context.Context, r *taskAPI.ExecProcessRequest) (_ *ptypes.Empty, err error) {
span, ctx := trace(ctx, "Exec")
span, ctx := trace(s.rootCtx, "Exec")
defer span.End()
start := time.Now()
@ -552,7 +553,7 @@ func (s *service) Exec(ctx context.Context, r *taskAPI.ExecProcessRequest) (_ *p
// ResizePty of a process
func (s *service) ResizePty(ctx context.Context, r *taskAPI.ResizePtyRequest) (_ *ptypes.Empty, err error) {
span, ctx := trace(ctx, "ResizePty")
span, ctx := trace(s.rootCtx, "ResizePty")
defer span.End()
start := time.Now()
@ -591,7 +592,7 @@ func (s *service) ResizePty(ctx context.Context, r *taskAPI.ResizePtyRequest) (_
// State returns runtime state information for a process
func (s *service) State(ctx context.Context, r *taskAPI.StateRequest) (_ *taskAPI.StateResponse, err error) {
span, ctx := trace(ctx, "State")
span, ctx := trace(s.rootCtx, "State")
defer span.End()
start := time.Now()
@ -643,7 +644,7 @@ func (s *service) State(ctx context.Context, r *taskAPI.StateRequest) (_ *taskAP
// Pause the container
func (s *service) Pause(ctx context.Context, r *taskAPI.PauseRequest) (_ *ptypes.Empty, err error) {
span, ctx := trace(ctx, "Pause")
span, ctx := trace(s.rootCtx, "Pause")
defer span.End()
start := time.Now()
@ -682,7 +683,7 @@ func (s *service) Pause(ctx context.Context, r *taskAPI.PauseRequest) (_ *ptypes
// Resume the container
func (s *service) Resume(ctx context.Context, r *taskAPI.ResumeRequest) (_ *ptypes.Empty, err error) {
span, ctx := trace(ctx, "Resume")
span, ctx := trace(s.rootCtx, "Resume")
defer span.End()
start := time.Now()
@ -719,7 +720,7 @@ func (s *service) Resume(ctx context.Context, r *taskAPI.ResumeRequest) (_ *ptyp
// Kill a process with the provided signal
func (s *service) Kill(ctx context.Context, r *taskAPI.KillRequest) (_ *ptypes.Empty, err error) {
span, ctx := trace(ctx, "Kill")
span, ctx := trace(s.rootCtx, "Kill")
defer span.End()
start := time.Now()
@ -780,7 +781,7 @@ func (s *service) Kill(ctx context.Context, r *taskAPI.KillRequest) (_ *ptypes.E
// Since for kata, it cannot get the process's pid from VM,
// thus only return the Shim's pid directly.
func (s *service) Pids(ctx context.Context, r *taskAPI.PidsRequest) (_ *taskAPI.PidsResponse, err error) {
span, ctx := trace(ctx, "Pids")
span, ctx := trace(s.rootCtx, "Pids")
defer span.End()
var processes []*task.ProcessInfo
@ -803,7 +804,7 @@ func (s *service) Pids(ctx context.Context, r *taskAPI.PidsRequest) (_ *taskAPI.
// CloseIO of a process
func (s *service) CloseIO(ctx context.Context, r *taskAPI.CloseIORequest) (_ *ptypes.Empty, err error) {
span, ctx := trace(ctx, "CloseIO")
span, ctx := trace(s.rootCtx, "CloseIO")
defer span.End()
start := time.Now()
@ -844,7 +845,7 @@ func (s *service) CloseIO(ctx context.Context, r *taskAPI.CloseIORequest) (_ *pt
// Checkpoint the container
func (s *service) Checkpoint(ctx context.Context, r *taskAPI.CheckpointTaskRequest) (_ *ptypes.Empty, err error) {
span, ctx := trace(ctx, "Checkpoint")
span, ctx := trace(s.rootCtx, "Checkpoint")
defer span.End()
start := time.Now()
@ -858,7 +859,7 @@ func (s *service) Checkpoint(ctx context.Context, r *taskAPI.CheckpointTaskReque
// Connect returns shim information such as the shim's pid
func (s *service) Connect(ctx context.Context, r *taskAPI.ConnectRequest) (_ *taskAPI.ConnectResponse, err error) {
span, ctx := trace(ctx, "Connect")
span, ctx := trace(s.rootCtx, "Connect")
defer span.End()
start := time.Now()
@ -878,7 +879,7 @@ func (s *service) Connect(ctx context.Context, r *taskAPI.ConnectRequest) (_ *ta
}
func (s *service) Shutdown(ctx context.Context, r *taskAPI.ShutdownRequest) (_ *ptypes.Empty, err error) {
span, ctx := trace(ctx, "Shutdown")
span, ctx := trace(s.rootCtx, "Shutdown")
start := time.Now()
defer func() {
@ -906,7 +907,7 @@ func (s *service) Shutdown(ctx context.Context, r *taskAPI.ShutdownRequest) (_ *
}
func (s *service) Stats(ctx context.Context, r *taskAPI.StatsRequest) (_ *taskAPI.StatsResponse, err error) {
span, ctx := trace(ctx, "Stats")
span, ctx := trace(s.rootCtx, "Stats")
defer span.End()
start := time.Now()
@ -935,7 +936,7 @@ func (s *service) Stats(ctx context.Context, r *taskAPI.StatsRequest) (_ *taskAP
// Update a running container
func (s *service) Update(ctx context.Context, r *taskAPI.UpdateTaskRequest) (_ *ptypes.Empty, err error) {
span, ctx := trace(ctx, "Update")
span, ctx := trace(s.rootCtx, "Update")
defer span.End()
start := time.Now()
@ -967,7 +968,7 @@ func (s *service) Update(ctx context.Context, r *taskAPI.UpdateTaskRequest) (_ *
// Wait for a process to exit
func (s *service) Wait(ctx context.Context, r *taskAPI.WaitRequest) (_ *taskAPI.WaitResponse, err error) {
span, ctx := trace(ctx, "Wait")
span, ctx := trace(s.rootCtx, "Wait")
defer span.End()
var ret uint32