From 847f74c284008247ae0d028c20910a0abcd90593 Mon Sep 17 00:00:00 2001 From: Lantao Liu Date: Wed, 9 Oct 2019 00:28:51 -0700 Subject: [PATCH] Fix delete error code on the containerd daemon side. Signed-off-by: Lantao Liu Signed-off-by: Phil Estes --- runtime/v1/linux/task.go | 12 +++++++++--- runtime/v2/shim.go | 14 +++++++++++--- services/tasks/local.go | 4 ++-- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/runtime/v1/linux/task.go b/runtime/v1/linux/task.go index 043f25b17d..65d7b88e4f 100644 --- a/runtime/v1/linux/task.go +++ b/runtime/v1/linux/task.go @@ -86,9 +86,12 @@ func (t *Task) Namespace() string { // Delete the task and return the exit status func (t *Task) Delete(ctx context.Context) (*runtime.Exit, error) { - rsp, err := t.shim.Delete(ctx, empty) - if err != nil && !errdefs.IsNotFound(err) { - return nil, errdefs.FromGRPC(err) + rsp, shimErr := t.shim.Delete(ctx, empty) + if shimErr != nil { + shimErr = errdefs.FromGRPC(shimErr) + if !errdefs.IsNotFound(shimErr) { + return nil, shimErr + } } t.tasks.Delete(ctx, t.id) if err := t.shim.KillShim(ctx); err != nil { @@ -97,6 +100,9 @@ func (t *Task) Delete(ctx context.Context) (*runtime.Exit, error) { if err := t.bundle.Delete(); err != nil { log.G(ctx).WithError(err).Error("failed to delete bundle") } + if shimErr != nil { + return nil, shimErr + } t.events.Publish(ctx, runtime.TaskDeleteEventTopic, &eventstypes.TaskDelete{ ContainerID: t.id, ExitStatus: rsp.ExitStatus, diff --git a/runtime/v2/shim.go b/runtime/v2/shim.go index ff8b07e4be..66a8dd0f5e 100644 --- a/runtime/v2/shim.go +++ b/runtime/v2/shim.go @@ -147,11 +147,14 @@ func (s *shim) Close() error { } func (s *shim) Delete(ctx context.Context) (*runtime.Exit, error) { - response, err := s.task.Delete(ctx, &task.DeleteRequest{ + response, shimErr := s.task.Delete(ctx, &task.DeleteRequest{ ID: s.ID(), }) - if err != nil && !errdefs.IsNotFound(err) { - return nil, errdefs.FromGRPC(err) + if shimErr != nil { + shimErr = errdefs.FromGRPC(shimErr) + if !errdefs.IsNotFound(shimErr) { + return nil, shimErr + } } if err := s.waitShutdown(ctx); err != nil { return nil, err @@ -162,6 +165,11 @@ func (s *shim) Delete(ctx context.Context) (*runtime.Exit, error) { // remove self from the runtime task list // this seems dirty but it cleans up the API across runtimes, tasks, and the service s.rtTasks.Delete(ctx, s.ID()) + + if shimErr != nil { + return nil, shimErr + } + s.events.Publish(ctx, runtime.TaskDeleteEventTopic, &eventstypes.TaskDelete{ ContainerID: s.ID(), ExitStatus: response.ExitStatus, diff --git a/services/tasks/local.go b/services/tasks/local.go index fc7f290ea6..24fab90296 100644 --- a/services/tasks/local.go +++ b/services/tasks/local.go @@ -229,7 +229,7 @@ func (l *local) Delete(ctx context.Context, r *api.DeleteTaskRequest, _ ...grpc. } exit, err := t.Delete(ctx) if err != nil { - return nil, err + return nil, errdefs.ToGRPC(err) } return &api.DeleteResponse{ ExitStatus: exit.Status, @@ -245,7 +245,7 @@ func (l *local) DeleteProcess(ctx context.Context, r *api.DeleteProcessRequest, } process, err := t.Process(ctx, r.ExecID) if err != nil { - return nil, err + return nil, errdefs.ToGRPC(err) } exit, err := process.Delete(ctx) if err != nil {