module Steem::Retriable

Constants

MAX_BACKOFF

@private

MAX_RETRY_COUNT

@private

MAX_RETRY_ELAPSE
RETRYABLE_EXCEPTIONS

Public Instance Methods

can_retry?(e = nil) click to toggle source
# File lib/steem/mixins/retriable.rb, line 16
def can_retry?(e = nil)
  @retry_count ||= 0
  
  return false if @retry_count >= MAX_RETRY_COUNT
  
  @retry_count = if retry_reset?
    @first_retry_at = nil
  else
    @retry_count + 1
  end
  
  can_retry = case e
  when *RETRYABLE_EXCEPTIONS then true
  else; false
  end
  
  backoff if can_retry
  
  can_retry
end

Private Instance Methods

backoff() click to toggle source

Expontential backoff.

@private

# File lib/steem/mixins/retriable.rb, line 50
def backoff
  @backoff ||= 0.1
  @backoff *= 2
  @backoff = 0.1 if @backoff > MAX_BACKOFF
  
  sleep @backoff
end
first_retry_at() click to toggle source

@private

# File lib/steem/mixins/retriable.rb, line 38
def first_retry_at
  @first_retry_at ||= Time.now.utc
end
retry_reset?() click to toggle source

@private

# File lib/steem/mixins/retriable.rb, line 43
def retry_reset?
  Time.now.utc - first_retry_at > MAX_RETRY_ELAPSE
end