summaryrefslogtreecommitdiff
path: root/vendor/github.com/google/cadvisor/container
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/google/cadvisor/container')
-rw-r--r--vendor/github.com/google/cadvisor/container/containerd/client.go9
-rw-r--r--vendor/github.com/google/cadvisor/container/containerd/handler.go9
2 files changed, 16 insertions, 2 deletions
diff --git a/vendor/github.com/google/cadvisor/container/containerd/client.go b/vendor/github.com/google/cadvisor/container/containerd/client.go
index 47eaffad7..d67f4aee0 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"
"github.com/containerd/containerd/containers"
"github.com/containerd/containerd/errdefs"
"github.com/containerd/containerd/pkg/dialer"
@@ -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 c21397902..0c8c80432 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"
@@ -99,10 +100,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
}