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