diff --git a/lib/bootic_client/client.rb b/lib/bootic_client/client.rb index 948647d..8857d56 100644 --- a/lib/bootic_client/client.rb +++ b/lib/bootic_client/client.rb @@ -61,8 +61,15 @@ def delete(href, _ = {}, headers = {}) protected + DEFAULT_TIMEOUT = 10 # seconds + def conn(&block) - @conn ||= Faraday.new do |f| + request_opts = { + timeout: options[:timeout] || DEFAULT_TIMEOUT, # both read/open timeout + open_timeout: options[:open_timeout] || DEFAULT_TIMEOUT, # only open timeout + } + + @conn ||= Faraday.new(request: request_opts) do |f| cache_options = {shared_cache: false, store: options[:cache_store]} cache_options[:logger] = options[:logger] if options[:logging] diff --git a/lib/bootic_client/strategies/oauth2_strategy.rb b/lib/bootic_client/strategies/oauth2_strategy.rb index cf31cac..029971a 100644 --- a/lib/bootic_client/strategies/oauth2_strategy.rb +++ b/lib/bootic_client/strategies/oauth2_strategy.rb @@ -30,10 +30,10 @@ def request_headers def retryable(&block) begin - yield + super rescue AuthorizationError => e update_token! - yield + super end end diff --git a/lib/bootic_client/strategies/strategy.rb b/lib/bootic_client/strategies/strategy.rb index 45b6c98..5a678c6 100644 --- a/lib/bootic_client/strategies/strategy.rb +++ b/lib/bootic_client/strategies/strategy.rb @@ -36,6 +36,8 @@ def inspect attr_reader :config, :on_new_token + MAX_RETRIES = 3 + def validate! # Overwrite in sub classes # to raise ArgumentErrors on @@ -62,7 +64,17 @@ def pre_flight # end # def retryable(&block) - yield + begin + retries ||= 0 + yield + rescue Faraday::ConnectionFailed => e + if (retries += 1) < MAX_RETRIES + # puts "Retrying request, attempt #{retries}" + retry + else + raise + end + end end # Noop. Merge these headers into every request.