From da2f4b6d61b480fea0d22c25f94677885108c9b9 Mon Sep 17 00:00:00 2001 From: Victor Marmol Date: Fri, 20 Feb 2015 13:10:40 -0800 Subject: [PATCH] Check Docker init PID is valid before we use it. This gives us an error if the PID is not returned as we expect. --- pkg/kubelet/dockertools/fake_docker_client.go | 5 ++++- pkg/kubelet/kubelet.go | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/pkg/kubelet/dockertools/fake_docker_client.go b/pkg/kubelet/dockertools/fake_docker_client.go index 5995622504b..28c05eb34b7 100644 --- a/pkg/kubelet/dockertools/fake_docker_client.go +++ b/pkg/kubelet/dockertools/fake_docker_client.go @@ -121,7 +121,10 @@ func (f *FakeDockerClient) StartContainer(id string, hostConfig *docker.HostConf Name: id, // For testing purpose, we set name to id Config: &docker.Config{Image: "testimage"}, HostConfig: hostConfig, - State: docker.State{Running: true}, + State: docker.State{ + Running: true, + Pid: 42, + }, } return f.Err } diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 99495dd7bfb..a7fcc45a956 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -961,6 +961,10 @@ func (kl *Kubelet) createPodInfraContainer(pod *api.BoundPod) (dockertools.Docke return "", err } + // Ensure the PID actually exists, else we'll move ourselves. + if containerInfo.State.Pid == 0 { + return "", fmt.Errorf("failed to get init PID for Docker pod infra container %q", string(id)) + } return id, util.ApplyOomScoreAdj(containerInfo.State.Pid, podOomScoreAdj) }