Change:
Device Plugin [Feature:DevicePluginProbe][NodeFeature:DevicePluginProbe][Serial] DevicePlugin [Serial] [Disruptive] Can schedule a pod that requires a device It appears a bit flaky on testgrid, but more recently been failing more often No response example - No response /sig node
/cc
/triage accepted /assign /priority important-soon
I ran this test locally 15 times back to back and did not run into this failure. The test passed locally. I suspect this to be a case where pod cleanup is not happening properly. In this test, we are relying on the number of PodResources and based on the error it looks like we have an addtional pod running other than the two expected pods (device plugin pod and test pod requesting device) but can't be 100% sure because we don't have enough logs to support that claim. Going to add more logs to expose output obtained from the podresource API endpoint.

Discussion:
initialConfig.ContainerLogMaxSize = testContainerLogMaxSize }) <del> ginkgo.It("should be rotated and limited to a fixed amount of files", func(ctx context.Context) { </del> <ins> var logRotationPod *v1.Pod ginkgo.BeforeEach(func() { </ins> ginkgo.By("create log container") pod := &v1.Pod{ ObjectMeta: metav1.ObjectMeta{

}, }, } <del> pod = e2epod.NewPodClient(f).CreateSync(pod) </del> <ins> logRotationPod = e2epod.NewPodClient(f).CreateSync(pod) ginkgo.DeferCleanup(e2epod.NewPodClient(f).DeleteSync, logRotationPod.Name, metav1.DeleteOptions{}, time.Minute) }) ginkgo.It("should be rotated and limited to a fixed amount of files", func(ctx context.Context) { </ins> ginkgo.By("get container log path") <del> framework.ExpectEqual(len(pod.Status.ContainerStatuses), 1) id := kubecontainer.ParseContainerID(pod.Status.ContainerStatuses[0].ContainerID).ID </del> <ins> framework.ExpectEqual(len(logRotationPod.Status.ContainerStatuses), 1, "log rotation pod should have one container") id := kubecontainer.ParseContainerID(logRotationPod.Status.ContainerStatuses[0].ContainerID).ID </ins> r, _, err := getCRIClient() <del> framework.ExpectNoError(err) </del> <ins> framework.ExpectNoError(err, "should connect to CRI and obtain runtime service clients and image service client") </ins> resp, err := r.ContainerStatus(context.Background(), id, false) framework.ExpectNoError(err) logPath := resp.GetStatus().GetLogPath()

// and then use the same here devsLen := int64(2) var devicePluginPod, dptemplate *v1.Pod <ins> var v1alphaPodResources *kubeletpodresourcesv1alpha1.ListPodResourcesResponse var v1PodResources *kubeletpodresourcesv1.ListPodResourcesResponse var err error </ins> ginkgo.BeforeEach(func() { ginkgo.By("Wait for node to be ready") gomega.Eventually(func() bool {

return nodes == 1 }, time.Minute, time.Second).Should(gomega.BeTrue()) <ins> v1alphaPodResources, err = getV1alpha1NodeDevices() framework.ExpectNoError(err, "should get node local podresources by accessing the (v1alpha) podresources API endpoint") v1PodResources, err = getV1NodeDevices() framework.ExpectNoError(err, "should get node local podresources by accessing the (v1) podresources API endpoint") // Before we run the device plugin test, we need to ensure // that the cluster is in a clean state and there are no // pods running on this node. gomega.Expect(v1alphaPodResources.PodResources).To(gomega.BeEmpty(), "should have no pod resources") gomega.Expect(v1PodResources.PodResources).To(gomega.BeEmpty(), "should have no pod resources") </ins> ginkgo.By("Scheduling a sample device plugin pod") data, err := e2etestfiles.Read(SampleDevicePluginDSYAML) if err != nil {

devID1 := parseLog(f, pod1.Name, pod1.Name, deviceIDRE) gomega.Expect(devID1).To(gomega.Not(gomega.Equal(""))) <del> v1alphaPodResources, err := getV1alpha1NodeDevices() </del> <ins> v1alphaPodResources, err = getV1alpha1NodeDevices() </ins> framework.ExpectNoError(err) <del> v1PodResources, err := getV1NodeDevices() </del> <ins> v1PodResources, err = getV1NodeDevices() </ins> framework.ExpectNoError(err) framework.Logf("v1alphaPodResources.PodResources:%+vn", v1alphaPodResources.PodResources)