Sha256: 542aeea9e22b18b03e567e156b44205db7632ca0f4a95f6be291de115f112ba7

Contents?: true

Size: 798 Bytes

Versions: 33

Compression:

Stored size: 798 Bytes

Contents

module SmartyStreets
  class RetrySender
    MAX_BACKOFF_DURATION = 10
    STATUS_INTERNAL_SERVER_ERROR = 500

    def initialize(max_retries, inner, sleeper, logger)
      @max_retries = max_retries
      @inner = inner
      @sleeper = sleeper
      @logger = logger
    end

    def send(request)
      response = @inner.send(request)

      (0..@max_retries-1).each do |i|
        break if response.status_code.to_i < STATUS_INTERNAL_SERVER_ERROR

        backoff(i)

        response = @inner.send(request)
      end

      response
    end

    def backoff(attempt)
      backoff_duration = [attempt, MAX_BACKOFF_DURATION].min

      @logger.log("There was an error processing the request. Retrying in #{backoff_duration} seconds...")
      @sleeper.sleep(backoff_duration)
    end
  end
end

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
smartystreets_ruby_sdk-5.14.8 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.14.7 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.14.6 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.14.5 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.14.4 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.14.3 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.14.1 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.14.0 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.13.0 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.12.1 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.12.0 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.11.2 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.11.1 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.11.0 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.10.0 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.9.2 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.9.1 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.9.0 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.8.0 lib/smartystreets_ruby_sdk/retry_sender.rb
smartystreets_ruby_sdk-5.7.1 lib/smartystreets_ruby_sdk/retry_sender.rb