lib/asana/http_client/error_handling.rb in asana-0.10.3 vs lib/asana/http_client/error_handling.rb in asana-0.10.12
- old
+ new
@@ -9,11 +9,11 @@
module ErrorHandling
include Errors
module_function
- MAX_TIMEOUTS = 5
+ MAX_RETRIES = 5
# Public: Perform a request handling any API errors correspondingly.
#
# request - [Proc] a block that will execute the request.
#
@@ -26,11 +26,11 @@
# Raises [Asana::Errors::RateLimitEnforced] when the API is throttling.
# Raises [Asana::Errors::ServerError] when there's a server problem.
# Raises [Asana::Errors::APIError] when the API returns an unknown error.
#
# rubocop:disable all
- def handle(num_timeouts=0, &request)
+ def handle(num_retries=0, &request)
request.call
rescue Faraday::ClientError => e
raise e unless e.response
case e.response[:status]
when 400 then raise invalid_request(e.response)
@@ -41,12 +41,19 @@
when 412 then recover_response(e.response)
when 429 then raise rate_limit_enforced(e.response)
when 500 then raise server_error(e.response)
else raise api_error(e.response)
end
+ # Retry for timeouts or 500s from Asana
+ rescue Faraday::ServerError => e
+ if num_retries < MAX_RETRIES
+ handle(num_retries + 1, &request)
+ else
+ raise server_error(e.response)
+ end
rescue Net::ReadTimeout => e
- if num_timeouts < MAX_TIMEOUTS
- handle(num_timeouts + 1, &request)
+ if num_retries < MAX_RETRIES
+ handle(num_retries + 1, &request)
else
raise e
end
end
# rubocop:enable all