spaceship/lib/spaceship/connect_api/api_client.rb in fastlane-2.214.0 vs spaceship/lib/spaceship/connect_api/api_client.rb in fastlane-2.215.0
- old
+ new
@@ -154,20 +154,30 @@
def initialize(msg)
super
end
end
- def with_asc_retry(tries = 5, &_block)
+ class TooManyRequestsError < StandardError
+ def initialize(msg)
+ super
+ end
+ end
+
+ def with_asc_retry(tries = 5, backoff = 1, &_block)
response = yield
status = response.status if response
if [500, 504].include?(status)
msg = "Timeout received! Retrying after 3 seconds (remaining: #{tries})..."
raise TimeoutRetryError, msg
end
+ if status == 429
+ raise TooManyRequestsError, "Too many requests, backing off #{backoff} seconds"
+ end
+
return response
rescue UnauthorizedAccessError => error
tries -= 1
puts(error) if Spaceship::Globals.verbose?
if tries.zero?
@@ -184,9 +194,17 @@
if tries.zero?
return response
else
retry
end
+ rescue TooManyRequestsError => error
+ if backoff > 3600
+ raise TooManyRequestsError, "Too many requests, giving up after backing off for > 3600 seconds."
+ end
+ puts(error) if Spaceship::Globals.verbose?
+ Kernel.sleep(backoff)
+ backoff *= 2
+ retry
end
def handle_response(response)
if (200...300).cover?(response.status) && (response.body.nil? || response.body.empty?)
return