Merge pull request #1489 from crosbymichael/list-state

Handle locking and errors for process state
This commit is contained in:
Phil Estes 2017-09-07 20:03:14 -04:00 committed by GitHub
commit a791f0442a
3 changed files with 23 additions and 8 deletions

View File

@ -222,8 +222,13 @@ func (p *initProcess) ExitedAt() time.Time {
}
func (p *initProcess) Status(ctx context.Context) (string, error) {
p.mu.Lock()
defer p.mu.Unlock()
c, err := p.runtime.State(ctx, p.id)
if err != nil {
if os.IsNotExist(err) {
return "stopped", nil
}
return "", p.runtimeError(err, "OCI runtime state failed")
}
return c.Status, nil

View File

@ -5,6 +5,8 @@ package linux
import (
"context"
"google.golang.org/grpc"
"github.com/containerd/cgroups"
"github.com/containerd/containerd/api/types/task"
"github.com/containerd/containerd/errdefs"
@ -63,8 +65,11 @@ func (t *Task) State(ctx context.Context) (runtime.State, error) {
ID: t.id,
})
if err != nil {
if err != grpc.ErrServerStopped {
return runtime.State{}, errdefs.FromGRPC(err)
}
return runtime.State{}, errdefs.ErrNotFound
}
var status runtime.Status
switch response.Status {
case task.StatusCreated:

View File

@ -274,15 +274,20 @@ func (s *Service) List(ctx context.Context, r *api.ListTasksRequest) (*api.ListT
if err != nil {
return nil, errdefs.ToGRPC(err)
}
addTasks(ctx, resp, tasks)
}
return resp, nil
}
func addTasks(ctx context.Context, r *api.ListTasksResponse, tasks []runtime.Task) {
for _, t := range tasks {
tt, err := processFromContainerd(ctx, t)
if err != nil {
return nil, err
log.G(ctx).WithError(err).WithField("id", t.ID()).Error("converting task to protobuf")
continue
}
resp.Tasks = append(resp.Tasks, tt)
r.Tasks = append(r.Tasks, tt)
}
}
return resp, nil
}
func (s *Service) Pause(ctx context.Context, r *api.PauseTaskRequest) (*google_protobuf.Empty, error) {