Skip to content

Commit 087ef8d

Browse files
authored
Merge pull request #5 from northnose/error-close
Close HTTP response when retrying on errors
2 parents 08c0c18 + 110e3b8 commit 087ef8d

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

client.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,28 +101,34 @@ func (c *Client) do(req *http.Request, seeker io.Seeker) (io.ReadCloser, int64,
101101
error_retry_time := 0.5
102102
request_loop:
103103
for error_retry_time < 300 {
104+
if res != nil && err == nil {
105+
// be sure to close the response before retrying
106+
ioutil.ReadAll(res.Body)
107+
res.Body.Close()
108+
}
104109
res, err = c.HTTPClient.Do(req)
105-
if err != nil {
110+
if err != nil {
106111
log.Printf("[DROPBOX_RETRY] %v; retrying after %.2f seconds", err, error_retry_time)
107112
time.Sleep(time.Duration(error_retry_time) * time.Second)
108113
error_retry_time *= 1.5
109114
if seeker != nil {
110115
seeker.Seek(0, io.SeekStart)
111116
}
112117
continue
113-
}
118+
}
119+
114120
switch {
115121
case res.StatusCode == 429:
116-
log.Printf("[DROPBOX_RETRY] %s %s returned %d; retrying after %.2f seconds", req.Method, req.URL, res.StatusCode, error_retry_time)
117122
sleep_time, conv_e := strconv.Atoi(res.Header.Get("Retry-After"))
118123
if conv_e != nil {
119124
sleep_time = 60
120125
}
126+
log.Printf("[DROPBOX_RETRY] %s %s returned %d; retrying after %d seconds", req.Method, req.URL, res.StatusCode, sleep_time)
121127
time.Sleep(time.Duration(sleep_time) * time.Second)
122128
if seeker != nil {
123129
seeker.Seek(0, io.SeekStart)
124130
}
125-
case res.StatusCode == 401:
131+
case res.StatusCode == 401:
126132
log.Printf("[DROPBOX_RETRY] %s %s returned %d; refreshing access token", req.Method, req.URL, res.StatusCode)
127133
err = c.refreshToken()
128134
req.Header.Set("Authorization", "Bearer "+c.AccessToken)

0 commit comments

Comments
 (0)