From b47770eaee36b144a1561934aca85179ade4dac8 Mon Sep 17 00:00:00 2001 From: Lantao Liu Date: Fri, 1 Dec 2017 00:24:44 +0000 Subject: [PATCH] Update containerd to fix fd leakage. Signed-off-by: Lantao Liu --- hack/versions | 2 +- vendor.conf | 2 +- vendor/github.com/containerd/containerd/container.go | 8 +++++++- .../containerd/containerd/oci/spec_opts_unix.go | 10 +++++----- vendor/github.com/containerd/containerd/task.go | 8 +++++++- 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/hack/versions b/hack/versions index d04717e45169..dd64320510c6 100644 --- a/hack/versions +++ b/hack/versions @@ -1,5 +1,5 @@ RUNC_VERSION=74a17296470088de3805e138d3d87c62e613dfc4 CNI_VERSION=v0.6.0 -CONTAINERD_VERSION=8114d2f2e255b9bd06c6d4377eb235ca809fc895 +CONTAINERD_VERSION=4bcd272c14255fd625f1cdfbdaa7623b668caa70 CRITOOL_VERSION=4cd2b047a26a2ef01bbd02ee55f7d70d8825ebb5 KUBERNETES_VERSION=164317879bcd810b97e5ebf1c8df041770f2ff1b diff --git a/vendor.conf b/vendor.conf index ff303dbf33b5..d6f9a0939280 100644 --- a/vendor.conf +++ b/vendor.conf @@ -2,7 +2,7 @@ github.com/blang/semver v3.1.0 github.com/boltdb/bolt e9cf4fae01b5a8ff89d0ec6b32f0d9c9f79aefdd github.com/BurntSushi/toml a368813c5e648fee92e5f6c30e3944ff9d5e8895 github.com/containerd/cgroups 29da22c6171a4316169f9205ab6c49f59b5b852f -github.com/containerd/containerd 8114d2f2e255b9bd06c6d4377eb235ca809fc895 +github.com/containerd/containerd 4bcd272c14255fd625f1cdfbdaa7623b668caa70 github.com/containerd/continuity cf279e6ac893682272b4479d4c67fd3abf878b4e github.com/containerd/fifo fbfb6a11ec671efbe94ad1c12c2e98773f19e1e6 github.com/containerd/typeurl f6943554a7e7e88b3c14aad190bf05932da84788 diff --git a/vendor/github.com/containerd/containerd/container.go b/vendor/github.com/containerd/containerd/container.go index 2d5c9aedb690..716e0456cbe4 100644 --- a/vendor/github.com/containerd/containerd/container.go +++ b/vendor/github.com/containerd/containerd/container.go @@ -162,11 +162,17 @@ func (c *container) Image(ctx context.Context) (Image, error) { }, nil } -func (c *container) NewTask(ctx context.Context, ioCreate cio.Creation, opts ...NewTaskOpts) (Task, error) { +func (c *container) NewTask(ctx context.Context, ioCreate cio.Creation, opts ...NewTaskOpts) (_ Task, err error) { i, err := ioCreate(c.id) if err != nil { return nil, err } + defer func() { + if err != nil && i != nil { + i.Cancel() + i.Close() + } + }() cfg := i.Config() request := &tasks.CreateTaskRequest{ ContainerID: c.id, diff --git a/vendor/github.com/containerd/containerd/oci/spec_opts_unix.go b/vendor/github.com/containerd/containerd/oci/spec_opts_unix.go index b17ca3216229..3a07f377e06f 100644 --- a/vendor/github.com/containerd/containerd/oci/spec_opts_unix.go +++ b/vendor/github.com/containerd/containerd/oci/spec_opts_unix.go @@ -101,7 +101,7 @@ func WithImageConfig(image Image) SpecOpts { parts := strings.Split(config.User, ":") switch len(parts) { case 1: - v, err := strconv.ParseUint(parts[0], 0, 10) + v, err := strconv.Atoi(parts[0]) if err != nil { // if we cannot parse as a uint they try to see if it is a username if err := WithUsername(config.User)(ctx, client, c, s); err != nil { @@ -113,13 +113,13 @@ func WithImageConfig(image Image) SpecOpts { return err } case 2: - v, err := strconv.ParseUint(parts[0], 0, 10) + v, err := strconv.Atoi(parts[0]) if err != nil { - return err + return errors.Wrapf(err, "parse uid %s", parts[0]) } uid := uint32(v) - if v, err = strconv.ParseUint(parts[1], 0, 10); err != nil { - return err + if v, err = strconv.Atoi(parts[1]); err != nil { + return errors.Wrapf(err, "parse gid %s", parts[1]) } gid := uint32(v) s.Process.User.UID, s.Process.User.GID = uid, gid diff --git a/vendor/github.com/containerd/containerd/task.go b/vendor/github.com/containerd/containerd/task.go index 2cbcbaff1099..8d256834fd7f 100644 --- a/vendor/github.com/containerd/containerd/task.go +++ b/vendor/github.com/containerd/containerd/task.go @@ -277,7 +277,7 @@ func (t *task) Delete(ctx context.Context, opts ...ProcessDeleteOpts) (*ExitStat return &ExitStatus{code: r.ExitStatus, exitedAt: r.ExitedAt}, nil } -func (t *task) Exec(ctx context.Context, id string, spec *specs.Process, ioCreate cio.Creation) (Process, error) { +func (t *task) Exec(ctx context.Context, id string, spec *specs.Process, ioCreate cio.Creation) (_ Process, err error) { if id == "" { return nil, errors.Wrapf(errdefs.ErrInvalidArgument, "exec id must not be empty") } @@ -285,6 +285,12 @@ func (t *task) Exec(ctx context.Context, id string, spec *specs.Process, ioCreat if err != nil { return nil, err } + defer func() { + if err != nil && i != nil { + i.Cancel() + i.Close() + } + }() any, err := typeurl.MarshalAny(spec) if err != nil { return nil, err