class EventStore::HTTP::Retry

Constants

Trigger

Public Class Methods

build(settings=nil, namespace: nil) click to toggle source
# File lib/event_store/http/retry.rb, line 21
def self.build(settings=nil, namespace: nil)
  settings ||= Settings.instance
  namespace ||= Array(namespace)

  instance = new
  ::Telemetry.configure instance
  settings.set instance, namespace
  instance
end
register_telemetry_sink(instance) click to toggle source
# File lib/event_store/http/retry.rb, line 31
def self.register_telemetry_sink(instance)
  sink = Telemetry::Sink.new
  instance.telemetry.register sink
  sink
end

Public Instance Methods

call(&block) click to toggle source
# File lib/event_store/http/retry.rb, line 37
def call(&block)
  retries ||= 0

  logger.trace { "Performing operation (Retries: #{retries}/#{retry_limit})" }

  return_value = block.(self, retries)

  logger.debug { "Operation succeeded (Retries: #{retries}/#{retry_limit})" }

  return_value

rescue => error
  if retries == retry_limit
    logger.error { "Operation failed; retry limit exceeded (Retries: #{retries}/#{retry_limit}, ErrorClass: #{error.class}, ErrorMessage: #{error.message.empty? ? '(none)' : error.message})" }
    raise error
  end

  logger.warn { "Operation failed; retrying (Retries: #{retries}/#{retry_limit}, ErrorClass: #{error.class}, ErrorMessage: #{error.message.empty? ? '(none)' : error.message})" }

  retries += 1
  sleep retry_duration_seconds
  record_retry error, retries

  retry
end
failed(error=nil) click to toggle source
# File lib/event_store/http/retry.rb, line 63
def failed(error=nil)
  error ||= Trigger.new

  raise error
end
record_retry(error, retries) click to toggle source
# File lib/event_store/http/retry.rb, line 69
def record_retry(error, retries)
  telemetry.record :retried, Telemetry::Retried.new(error, retries, retry_limit)
end
retry_duration() click to toggle source
# File lib/event_store/http/retry.rb, line 17
def retry_duration
  @retry_duration ||= Defaults.retry_duration
end
retry_duration_seconds() click to toggle source
# File lib/event_store/http/retry.rb, line 73
def retry_duration_seconds
  Rational(retry_duration, 1_000)
end
retry_limit() click to toggle source
# File lib/event_store/http/retry.rb, line 13
def retry_limit
  @retry_limit ||= Defaults.retry_limit
end