mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-08 11:38:15 +00:00
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 []()
This commit is contained in:
commit
a4b5f991e7
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user