in getter.go [109:138]
func (g *getter) retryRequest(method, urlStr string, body io.ReadSeeker) (resp *http.Response, err error) {
for i := 0; i < g.c.NTry; i++ {
var req *http.Request
req, err = http.NewRequest(method, urlStr, body)
if err != nil {
return
}
if body != nil {
req.Header.Set(s3client.SHA256Header, s3client.SHA256Reader(body))
}
g.b.Sign(req)
resp, err = g.c.Client.Do(req)
if err == nil && resp.StatusCode == 500 {
time.Sleep(time.Duration(math.Exp2(float64(i))) * 100 * time.Millisecond) // exponential back-off
continue
}
if err == nil {
return
}
logger.debugPrintln(err)
if body != nil {
if _, err = body.Seek(0, 0); err != nil {
return
}
}
}
return
}