diff --git a/internal/nri/domain.go b/internal/nri/domain.go index 858c5999482..79e46bf2e07 100644 --- a/internal/nri/domain.go +++ b/internal/nri/domain.go @@ -19,13 +19,13 @@ type Domain interface { GetName() string // ListPodSandboxes list all pods. - ListPodSandboxes() []PodSandbox + ListPodSandboxes(context.Context) []PodSandbox // ListContainer list all containers. ListContainers() []Container // GetPodSandbox returns the pod for the given ID. - GetPodSandbox(string) (PodSandbox, bool) + GetPodSandbox(context.Context, string) (PodSandbox, bool) // GetContainer returns the container for the given ID. GetContainer(string) (Container, bool) @@ -55,11 +55,11 @@ func (t *domainTable) set(d Domain) { t.domain = d } -func (t *domainTable) listPodSandboxes() []PodSandbox { +func (t *domainTable) listPodSandboxes(ctx context.Context) []PodSandbox { t.Lock() defer t.Unlock() - return t.domain.ListPodSandboxes() + return t.domain.ListPodSandboxes(ctx) } func (t *domainTable) listContainers() []Container { diff --git a/internal/nri/nri.go b/internal/nri/nri.go index eeb80855070..3871a9e1d0d 100644 --- a/internal/nri/nri.go +++ b/internal/nri/nri.go @@ -410,7 +410,7 @@ func (l *local) syncPlugin(ctx context.Context, syncFn nri.SyncCB) error { log.Infof(ctx, "Synchronizing NRI (plugin) with current runtime state") - pods := podSandboxesToNRI(domains.listPodSandboxes()) + pods := podSandboxesToNRI(domains.listPodSandboxes(ctx)) containers := containersToNRI(domains.listContainers()) for _, ctr := range containers { diff --git a/server/nri-api.go b/server/nri-api.go index 13e13d2f026..2861b1d92b1 100644 --- a/server/nri-api.go +++ b/server/nri-api.go @@ -54,7 +54,7 @@ func (a *nriAPI) runPodSandbox(ctx context.Context, criPod *sandbox.Sandbox) err return nil } - pod := nriPodSandbox(criPod) + pod := nriPodSandbox(ctx, criPod) err := a.nri.RunPodSandbox(ctx, pod) if err != nil { if undoErr := a.nri.StopPodSandbox(ctx, pod); undoErr != nil { @@ -73,7 +73,7 @@ func (a *nriAPI) stopPodSandbox(ctx context.Context, criPod *sandbox.Sandbox) er return nil } - pod := nriPodSandbox(criPod) + pod := nriPodSandbox(ctx, criPod) return a.nri.StopPodSandbox(ctx, pod) } @@ -83,7 +83,7 @@ func (a *nriAPI) removePodSandbox(ctx context.Context, criPod *sandbox.Sandbox) return nil } - pod := nriPodSandbox(criPod) + pod := nriPodSandbox(ctx, criPod) return a.nri.RemovePodSandbox(ctx, pod) } @@ -93,7 +93,7 @@ func (a *nriAPI) createContainer(ctx context.Context, specgen *generate.Generato return nil } - pod := nriPodSandbox(criPod) + pod := nriPodSandbox(ctx, criPod) ctr := &criContainer{ api: a, ctr: criCtr, @@ -175,7 +175,7 @@ func (a *nriAPI) postCreateContainer(ctx context.Context, criPod *sandbox.Sandbo return nil } - pod := nriPodSandbox(criPod) + pod := nriPodSandbox(ctx, criPod) ctr := &criContainer{ api: a, ctr: criCtr, @@ -189,7 +189,7 @@ func (a *nriAPI) startContainer(ctx context.Context, criPod *sandbox.Sandbox, cr return nil } - pod := nriPodSandbox(criPod) + pod := nriPodSandbox(ctx, criPod) ctr := &criContainer{ api: a, ctr: criCtr, @@ -203,7 +203,7 @@ func (a *nriAPI) postStartContainer(ctx context.Context, criPod *sandbox.Sandbox return nil } - pod := nriPodSandbox(criPod) + pod := nriPodSandbox(ctx, criPod) ctr := &criContainer{ api: a, ctr: criCtr, @@ -220,7 +220,7 @@ func (a *nriAPI) updateContainer(ctx context.Context, criCtr *oci.Container, req const noOomAdj = 0 criPod := a.cri.getSandbox(ctx, criCtr.Sandbox()) - pod := nriPodSandbox(criPod) + pod := nriPodSandbox(ctx, criPod) ctr := &criContainer{ api: a, ctr: criCtr, @@ -240,7 +240,7 @@ func (a *nriAPI) postUpdateContainer(ctx context.Context, criCtr *oci.Container) } criPod := a.cri.getSandbox(ctx, criCtr.Sandbox()) - pod := nriPodSandbox(criPod) + pod := nriPodSandbox(ctx, criPod) ctr := &criContainer{ api: a, ctr: criCtr, @@ -274,7 +274,7 @@ func (a *nriAPI) stopContainer(ctx context.Context, criPod *sandbox.Sandbox, cri } } - pod := nriPodSandbox(criPod) + pod := nriPodSandbox(ctx, criPod) return a.nri.StopContainer(ctx, pod, ctr) } @@ -284,7 +284,7 @@ func (a *nriAPI) removeContainer(ctx context.Context, criPod *sandbox.Sandbox, c return nil } - pod := nriPodSandbox(criPod) + pod := nriPodSandbox(ctx, criPod) ctr := &criContainer{ api: a, ctr: criCtr, @@ -298,7 +298,7 @@ func (a *nriAPI) undoCreateContainer(ctx context.Context, specgen *generate.Gene return } - pod := nriPodSandbox(criPod) + pod := nriPodSandbox(ctx, criPod) ctr := &criContainer{ api: a, ctr: criCtr, @@ -330,11 +330,11 @@ func (a *nriAPI) GetName() string { return nriDomain } -func (a *nriAPI) ListPodSandboxes() []nri.PodSandbox { +func (a *nriAPI) ListPodSandboxes(ctx context.Context) []nri.PodSandbox { pods := []nri.PodSandbox{} for _, pod := range a.cri.ContainerServer.ListSandboxes() { if pod.Created() { - pods = append(pods, nriPodSandbox(pod)) + pods = append(pods, nriPodSandbox(ctx, pod)) } } return pods @@ -358,7 +358,7 @@ func (a *nriAPI) ListContainers() []nri.Container { return containers } -func (a *nriAPI) GetPodSandbox(id string) (nri.PodSandbox, bool) { +func (a *nriAPI) GetPodSandbox(ctx context.Context, id string) (nri.PodSandbox, bool) { sandboxID, err := a.cri.PodIDIndex().Get(id) if err != nil { return nil, false @@ -369,7 +369,7 @@ func (a *nriAPI) GetPodSandbox(id string) (nri.PodSandbox, bool) { return nil, false } - return nriPodSandbox(pod), true + return nriPodSandbox(ctx, pod), true } func (a *nriAPI) GetContainer(id string) (nri.Container, bool) { @@ -435,7 +435,7 @@ type criPodSandbox struct { pid int } -func nriPodSandbox(pod *sandbox.Sandbox) *criPodSandbox { +func nriPodSandbox(ctx context.Context, pod *sandbox.Sandbox) *criPodSandbox { criPod := &criPodSandbox{ Sandbox: pod, spec: &rspec.Spec{}, @@ -443,12 +443,15 @@ func nriPodSandbox(pod *sandbox.Sandbox) *criPodSandbox { if ic := pod.InfraContainer(); ic != nil { spec := ic.Spec() - pid, err := ic.Pid() - if err != nil { - log.Warnf(context.TODO(), "Failed to get pid for pod infra container: %v", err) + if !ic.Spoofed() { + pid, err := ic.Pid() + if err != nil { + log.Debugf(ctx, "Failed to get pid for pod infra container: %v", err) + } else { + criPod.pid = pid + } } criPod.spec = &spec - criPod.pid = pid } return criPod