diff --git a/go.mod b/go.mod index 1e8c65e7743..16e9a0c81b0 100644 --- a/go.mod +++ b/go.mod @@ -44,7 +44,7 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da github.com/golang/mock v1.6.0 github.com/golang/protobuf v1.5.2 - github.com/google/cadvisor v0.44.0 + github.com/google/cadvisor v0.44.1 github.com/google/gnostic v0.5.7-v3refs github.com/google/go-cmp v0.5.5 github.com/google/gofuzz v1.1.0 @@ -263,7 +263,7 @@ replace ( github.com/golang/protobuf => github.com/golang/protobuf v1.5.2 github.com/golangplus/testing => github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e github.com/google/btree => github.com/google/btree v1.0.1 - github.com/google/cadvisor => github.com/google/cadvisor v0.44.0 + github.com/google/cadvisor => github.com/google/cadvisor v0.44.1 github.com/google/cel-go => github.com/google/cel-go v0.10.1 github.com/google/cel-spec => github.com/google/cel-spec v0.6.0 github.com/google/gnostic => github.com/google/gnostic v0.5.7-v3refs diff --git a/go.sum b/go.sum index 58d6202aeed..49c547ebf4d 100644 --- a/go.sum +++ b/go.sum @@ -213,8 +213,8 @@ github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e h1:KhcknUwkWHKZ github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/cadvisor v0.44.0 h1:523mBK94XHKAsU1TIQl/tYoPyYpWQdalf2CQ8Gv2Xek= -github.com/google/cadvisor v0.44.0/go.mod h1:GQ9KQfz0iNHQk3D6ftzJWK4TXabfIgM10Oy3FkR+Gzg= +github.com/google/cadvisor v0.44.1 h1:hsAxDZOY+5xSCXH12d/G9cxYTfP+32cMT3J7aatrgDY= +github.com/google/cadvisor v0.44.1/go.mod h1:GQ9KQfz0iNHQk3D6ftzJWK4TXabfIgM10Oy3FkR+Gzg= github.com/google/cel-go v0.10.1 h1:MQBGSZGnDwh7T/un+mzGKOMz3x+4E/GDPprWjDL+1Jg= github.com/google/cel-go v0.10.1/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= diff --git a/vendor/github.com/google/cadvisor/container/containerd/client.go b/vendor/github.com/google/cadvisor/container/containerd/client.go index 02fd8ce782d..c4921a5b7a5 100644 --- a/vendor/github.com/google/cadvisor/container/containerd/client.go +++ b/vendor/github.com/google/cadvisor/container/containerd/client.go @@ -16,6 +16,7 @@ package containerd import ( "context" + "errors" "fmt" "net" "sync" @@ -24,6 +25,7 @@ import ( containersapi "github.com/containerd/containerd/api/services/containers/v1" tasksapi "github.com/containerd/containerd/api/services/tasks/v1" versionapi "github.com/containerd/containerd/api/services/version/v1" + tasktypes "github.com/containerd/containerd/api/types/task" ptypes "github.com/gogo/protobuf/types" "github.com/google/cadvisor/container/containerd/containers" "github.com/google/cadvisor/container/containerd/errdefs" @@ -44,6 +46,10 @@ type ContainerdClient interface { Version(ctx context.Context) (string, error) } +var ( + ErrTaskIsInUnknownState = errors.New("containerd task is in unknown state") // used when process reported in containerd task is in Unknown State +) + var once sync.Once var ctrdClient ContainerdClient = nil @@ -114,6 +120,9 @@ func (c *client) TaskPid(ctx context.Context, id string) (uint32, error) { if err != nil { return 0, errdefs.FromGRPC(err) } + if response.Process.Status == tasktypes.StatusUnknown { + return 0, ErrTaskIsInUnknownState + } return response.Process.Pid, nil } diff --git a/vendor/github.com/google/cadvisor/container/containerd/handler.go b/vendor/github.com/google/cadvisor/container/containerd/handler.go index 0fc88035420..848550ec6eb 100644 --- a/vendor/github.com/google/cadvisor/container/containerd/handler.go +++ b/vendor/github.com/google/cadvisor/container/containerd/handler.go @@ -17,6 +17,7 @@ package containerd import ( "encoding/json" + "errors" "fmt" "strings" "time" @@ -101,10 +102,14 @@ func newContainerdContainerHandler( if err == nil { break } - retry-- - if !errdefs.IsNotFound(err) || retry == 0 { + + // Retry when task is not created yet or task is in unknown state (likely in process of initializing) + isRetriableError := errdefs.IsNotFound(err) || errors.Is(err, ErrTaskIsInUnknownState) + if !isRetriableError || retry == 0 { return nil, err } + + retry-- time.Sleep(backoff) backoff *= 2 } diff --git a/vendor/modules.txt b/vendor/modules.txt index b99d78b17e5..f3860c0c9ff 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -322,7 +322,7 @@ github.com/golang/protobuf/ptypes/timestamp github.com/golang/protobuf/ptypes/wrappers # github.com/google/btree v1.0.1 => github.com/google/btree v1.0.1 github.com/google/btree -# github.com/google/cadvisor v0.44.0 => github.com/google/cadvisor v0.44.0 +# github.com/google/cadvisor v0.44.1 => github.com/google/cadvisor v0.44.1 ## explicit github.com/google/cadvisor/accelerators github.com/google/cadvisor/cache/memory @@ -2545,7 +2545,7 @@ sigs.k8s.io/yaml # github.com/golang/protobuf => github.com/golang/protobuf v1.5.2 # github.com/golangplus/testing => github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e # github.com/google/btree => github.com/google/btree v1.0.1 -# github.com/google/cadvisor => github.com/google/cadvisor v0.44.0 +# github.com/google/cadvisor => github.com/google/cadvisor v0.44.1 # github.com/google/cel-go => github.com/google/cel-go v0.10.1 # github.com/google/cel-spec => github.com/google/cel-spec v0.6.0 # github.com/google/gnostic => github.com/google/gnostic v0.5.7-v3refs