Commit 7748a02e authored by Andy Goldstein's avatar Andy Goldstein

Eliminate possible infinite loop in exec

If a user starts an exec session with a shell and leaves it idle long enough, they will eventually hit the Kubelet's HTTP server's read/write timeout of 5 minutes. At this time, the StartExec call to Docker exits, but if the user requested a TTY, the exec'd process does not exit. After StartExec finishes, we try to determine the exit code of the exec'd process, but in this case, we'll never get it. This change exits the loop after 5 tries if the process is still running.
parent d763252b
...@@ -25,6 +25,7 @@ import ( ...@@ -25,6 +25,7 @@ import (
kubecontainer "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/container" kubecontainer "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/container"
docker "github.com/fsouza/go-dockerclient" docker "github.com/fsouza/go-dockerclient"
"github.com/golang/glog"
) )
// ExecHandler knows how to execute a command in a running Docker container. // ExecHandler knows how to execute a command in a running Docker container.
...@@ -123,6 +124,7 @@ func (*NativeExecHandler) ExecInContainer(client DockerInterface, container *doc ...@@ -123,6 +124,7 @@ func (*NativeExecHandler) ExecInContainer(client DockerInterface, container *doc
return err return err
} }
tick := time.Tick(2 * time.Second) tick := time.Tick(2 * time.Second)
count := 0
for { for {
inspect, err2 := client.InspectExec(execObj.ID) inspect, err2 := client.InspectExec(execObj.ID)
if err2 != nil { if err2 != nil {
...@@ -134,6 +136,13 @@ func (*NativeExecHandler) ExecInContainer(client DockerInterface, container *doc ...@@ -134,6 +136,13 @@ func (*NativeExecHandler) ExecInContainer(client DockerInterface, container *doc
} }
break break
} }
count++
if count == 5 {
glog.Errorf("Exec session %s in container %s terminated but process still running!", execObj.ID, container.ID)
break
}
<-tick <-tick
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment