Commit a4b5f991 authored by k8s-merge-robot's avatar k8s-merge-robot Committed by GitHub

Merge pull request #27148 from janetkuo/io-timeout-sleep-and-talk

Automatic merge from submit-queue In case of i/o timeout error in kubectl e2e, try talking to the server again after 2s before dying Ref #26715 [![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/.github/PULL_REQUEST_TEMPLATE.md?pixel)]()
parents f789a076 13718846
...@@ -1839,10 +1839,33 @@ func (b kubectlBuilder) WithStdinReader(reader io.Reader) *kubectlBuilder { ...@@ -1839,10 +1839,33 @@ func (b kubectlBuilder) WithStdinReader(reader io.Reader) *kubectlBuilder {
func (b kubectlBuilder) ExecOrDie() string { func (b kubectlBuilder) ExecOrDie() string {
str, err := b.Exec() str, err := b.Exec()
Logf("stdout: %q", str) Logf("stdout: %q", str)
// In case of i/o timeout error, try talking to the apiserver again after 2s before dying.
// Note that we're still dying after retrying so that we can get visibility to triage it further.
if isTimeout(err) {
Logf("Hit i/o timeout error, talking to the server 2s later to see if it's temporary.")
time.Sleep(2 * time.Second)
retryStr, retryErr := RunKubectl("version")
Logf("stdout: %q", retryStr)
Logf("err: %v", retryErr)
}
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
return str return str
} }
func isTimeout(err error) bool {
switch err := err.(type) {
case net.Error:
if err.Timeout() {
return true
}
case *url.Error:
if err, ok := err.Err.(net.Error); ok && err.Timeout() {
return true
}
}
return false
}
func (b kubectlBuilder) Exec() (string, error) { func (b kubectlBuilder) Exec() (string, error) {
var stdout, stderr bytes.Buffer var stdout, stderr bytes.Buffer
cmd := b.cmd cmd := b.cmd
......
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