diff --git a/gitee/client.go b/gitee/client.go index bf6510ca824e2515aa6029999c6868ddb8a40a39..38d8f4bf88deaa3c6f11c37a90fa3ca2a5fdcdf9 100644 --- a/gitee/client.go +++ b/gitee/client.go @@ -186,8 +186,33 @@ func parameterToString(obj interface{}, collectionFormat string) string { } // callAPI do the request. -func (c *APIClient) callAPI(request *http.Request) (*http.Response, error) { - return c.cfg.HTTPClient.Do(request) +func (c *APIClient) callAPI(request *http.Request) (r *http.Response, err error) { + canRetry := func() bool { + if r != nil && r.StatusCode == 502 { + return true + } + + return err != nil && strings.Contains(strings.ToLower(err.Error()), "502 bad gateway") + } + + n := 3 + for i := 0; i < n; i++ { + r, err = c.cfg.HTTPClient.Do(request) + if !canRetry() { + return + } + + if err == nil && r != nil && r.Body != nil { + r.Body.Close() + } + + j := i + 1 + if j >= n { + break + } + time.Sleep(time.Duration(j) * time.Second) + } + return } // Change base path to allow switching to mocks