同步操作将从 src-openEuler/containerd 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
From 907578c6d8421d340c353ad27503bbfdb7f422d1 Mon Sep 17 00:00:00 2001From: xiadanni <xiadanni@huawei.com>Date: 2019年2月15日 06:00:52 +0800Subject: [PATCH] containerd:set create and exec timeout to avild block whencommand failed---cmd/containerd-shim/main_unix.go | 2 +-sys/reaper/reaper_unix.go | 21 +++++++-.../github.com/containerd/go-runc/monitor.go | 6 +++vendor/github.com/containerd/go-runc/runc.go | 54 +++++++++++++++++--4 files changed, 77 insertions(+), 6 deletions(-)diff --git a/cmd/containerd-shim/main_unix.go b/cmd/containerd-shim/main_unix.goindex 6c3326f..8dfcd90 100644--- a/cmd/containerd-shim/main_unix.go+++ b/cmd/containerd-shim/main_unix.go@@ -312,7 +312,7 @@ func (l *remoteEventsPublisher) doPublish(ctx context.Context, topic string, eveif err != nil {return err}- status, err := reaper.Default.WaitTimeout(cmd, c, 30*time.Second)+ status, err := reaper.Default.WaitTimeout(cmd, c, 30)if err != nil {return fmt.Errorf("failed to publish event: %s: %w", b.String(), err)}diff --git a/sys/reaper/reaper_unix.go b/sys/reaper/reaper_unix.goindex 6c4f13b..bf42d21 100644--- a/sys/reaper/reaper_unix.go+++ b/sys/reaper/reaper_unix.go@@ -22,6 +22,10 @@ package reaperimport ("errors""fmt"+ "io/ioutil"+ "path/filepath"+ "strconv"+ "strings""sync""syscall""time"@@ -119,7 +123,8 @@ func (m *Monitor) Wait(c *exec.Cmd, ec chan runc.Exit) (int, error) {}// WaitTimeout is used to skip the blocked command and kill the left process.-func (m *Monitor) WaitTimeout(c *exec.Cmd, ec chan runc.Exit, timeout time.Duration) (int, error) {+func (m *Monitor) WaitTimeout(c *exec.Cmd, ec chan runc.Exit, sec int64) (int, error) {+ timeout := time.Duration(sec) * time.Secondtype exitStatusWrapper struct {status interr error@@ -281,3 +286,17 @@ func exitStatus(status unix.WaitStatus) int {}return status.ExitStatus()}++func SameProcess(cmd *exec.Cmd, pid int) bool {+ bytes, err := ioutil.ReadFile(filepath.Join("/proc", strconv.Itoa(pid), "cmdline"))+ if err != nil {+ return false+ }+ for i := range bytes {+ if bytes[i] == 0 {+ bytes[i] = 32+ }+ }+ cmdline := string(bytes)+ return strings.EqualFold(cmdline, strings.Join(cmd.Args, " ")+" ")+}diff --git a/vendor/github.com/containerd/go-runc/monitor.go b/vendor/github.com/containerd/go-runc/monitor.goindex ff06a3f..9756491 100644--- a/vendor/github.com/containerd/go-runc/monitor.go+++ b/vendor/github.com/containerd/go-runc/monitor.go@@ -40,6 +40,7 @@ type Exit struct {type ProcessMonitor interface {Start(*exec.Cmd) (chan Exit, error)Wait(*exec.Cmd, chan Exit) (int, error)+ WaitTimeout(*exec.Cmd, chan Exit, int64) (int, error)}type defaultMonitor struct {@@ -74,3 +75,8 @@ func (m *defaultMonitor) Wait(c *exec.Cmd, ec chan Exit) (int, error) {e := <-ecreturn e.Status, nil}++func (m *defaultMonitor) WaitTimeout(c *exec.Cmd, ec chan Exit, sec int64) (int, error) {+ e := <-ec+ return e.Status, nil+}diff --git a/vendor/github.com/containerd/go-runc/runc.go b/vendor/github.com/containerd/go-runc/runc.goindex 0feedeb..15fc8e1 100644--- a/vendor/github.com/containerd/go-runc/runc.go+++ b/vendor/github.com/containerd/go-runc/runc.go@@ -54,8 +54,22 @@ const (Text Format = "text"// DefaultCommand is the default command for RuncDefaultCommand = "runc"+ execTimeout = 30)+var (+ createTimeout int64 = 120+)++func init() {+ runtimeTimeout, err := convertTime(os.Getenv("DOCKER_RUNTIME_START_TIMEOUT"))+ if err != nil {+ logrus.Warnf("init error, wrong runtimeTimeout format: %v", err)+ } else {+ createTimeout = runtimeTimeout+ }+}+// List returns all containers created inside the provided runc root directoryfunc (r *Runc) List(context context.Context) ([]*Container, error) {data, err := cmdOutput(r.command(context, "list", "--format=json"), false, nil)@@ -151,7 +165,7 @@ func (r *Runc) Create(context context.Context, id, bundle string, opts *CreateOpcmd.ExtraFiles = opts.ExtraFilesif cmd.Stdout == nil && cmd.Stderr == nil {- data, err := cmdOutput(cmd, true, nil)+ data, err := cmdOutputTimeout(cmd, true, nil, createTimeout)defer putBuf(data)if err != nil {return fmt.Errorf("%s: %s", err, data.String())@@ -169,7 +183,7 @@ func (r *Runc) Create(context context.Context, id, bundle string, opts *CreateOp}}}- status, err := Monitor.Wait(cmd, ec)+ status, err := Monitor.WaitTimeout(cmd, ec, createTimeout)if err == nil && status != 0 {err = fmt.Errorf("%s did not terminate successfully: %w", cmd.Args[0], &ExitError{status})}@@ -235,7 +249,7 @@ func (r *Runc) Exec(context context.Context, id string, spec specs.Process, optsopts.Set(cmd)}if cmd.Stdout == nil && cmd.Stderr == nil {- data, err := cmdOutput(cmd, true, opts.Started)+ data, err := cmdOutputTimeout(cmd, true, opts.Started, createTimeout)defer putBuf(data)if err != nil {return fmt.Errorf("%w: %s", err, data.String())@@ -256,7 +270,7 @@ func (r *Runc) Exec(context context.Context, id string, spec specs.Process, opts}}}- status, err := Monitor.Wait(cmd, ec)+ status, err := Monitor.WaitTimeout(cmd, ec, execTimeout)if err == nil && status != 0 {err = fmt.Errorf("%s did not terminate successfully: %w", cmd.Args[0], &ExitError{status})}@@ -742,6 +756,38 @@ func cmdOutput(cmd *exec.Cmd, combined bool, started chan<- int) (*bytes.Buffer,return b, err}+func cmdOutputTimeout(cmd *exec.Cmd, combined bool, started chan<- int, timeout int64) (*bytes.Buffer, error) {+ b := getBuf()+ defer putBuf(b)++ cmd.Stdout = b+ if combined {+ cmd.Stderr = b+ }+ ec, err := Monitor.Start(cmd)+ if err != nil {+ return nil, err+ }+ if started != nil {+ started <- cmd.Process.Pid+ }++ status, err := Monitor.WaitTimeout(cmd, ec, timeout)+ if err == nil && status != 0 {+ err = fmt.Errorf("%s did not terminate sucessfully", cmd.Args[0])+ }++ return b, err+}++func convertTime(timeout string) (int64, error) {+ timeDura, err := time.ParseDuration(timeout)+ if err != nil {+ return 0, err+ }+ return timeDura.Nanoseconds() / 1e9, nil+}+type ExitError struct {Status int}--2.33.0
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。