From 8cd3c25b414c35b1c79114a2f4739d26300c352b Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Tue, 16 Feb 2016 14:45:22 +0000 Subject: [PATCH] Amazon Cloud Drive: retry on 400, 401, 408, 504 and EOF errors - fixes #340 --- amazonclouddrive/amazonclouddrive.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/amazonclouddrive/amazonclouddrive.go b/amazonclouddrive/amazonclouddrive.go index dc8dfb0a7..f1853c130 100644 --- a/amazonclouddrive/amazonclouddrive.go +++ b/amazonclouddrive/amazonclouddrive.go @@ -129,14 +129,21 @@ func parsePath(path string) (root string) { // retryErrorCodes is a slice of error codes that we will retry var retryErrorCodes = []int{ + 400, // Bad request (seen in "Next token is expired") + 401, // Unauthorized (seen in "Token has expired") + 408, // Request Timeout 429, // Rate exceeded. 500, // Get occasional 500 Internal Server Error 503, // Service Unavailable + 504, // Gateway Time-out } // shouldRetry returns a boolean as to whether this resp and err // deserve to be retried. It returns the err as a convenience func shouldRetry(resp *http.Response, err error) (bool, error) { + if err == io.EOF { + return true, err + } return fs.ShouldRetry(err) || fs.ShouldRetryHTTP(resp, retryErrorCodes), err }