Sha256: 1af1c0452d25f4645fe5da9054a1a682aad7b80c0690961a9b3f3c2817f4e1fc
Contents?: true
Size: 1.56 KB
Versions: 11
Compression:
Stored size: 1.56 KB
Contents
module EventSourcery module EventProcessing module ErrorHandlers class ExponentialBackoffRetry include EventSourcery::EventProcessing::ErrorHandlers::ErrorHandler # The starting value for the retry interval used with {with_error_handling}. # # @api private DEFAULT_RETRY_INTERVAL = 1 # The maximum retry interval value to be used with {with_error_handling}. # # @api private MAX_RETRY_INTERVAL = 64 def initialize(processor_name:) @processor_name = processor_name @retry_interval = DEFAULT_RETRY_INTERVAL @error_event_uuid = nil end # Will yield the block and attempt to retry in an exponential backoff. def with_error_handling yield rescue => error report_error(error) update_retry_interval(error) sleep(@retry_interval) EventSourcery.logger.info { "Retrying #{@processor_name} with error: #{error.message} at interval=#{@retry_interval}" } retry end private def update_retry_interval(error) if error.instance_of?(EventSourcery::EventProcessingError) if @error_event_uuid == error.event.uuid @retry_interval *= 2 if @retry_interval < MAX_RETRY_INTERVAL else @error_event_uuid = error.event.uuid @retry_interval = DEFAULT_RETRY_INTERVAL end else @retry_interval = DEFAULT_RETRY_INTERVAL end end end end end end
Version data entries
11 entries across 11 versions & 1 rubygems