Sha256: 3bf4eaed7d1f6c6f33d8b68a03dc058764e8c79c88a5be7422b07c6023db4629

Contents?: true

Size: 963 Bytes

Versions: 1

Compression:

Stored size: 963 Bytes

Contents

require 'sidekiq'

require 'sidekiq/instantly_dead/version'
require 'sidekiq/instantly_dead_error'

module Sidekiq
  module InstantlyDead
    class Middleware
      def initialize(options = {})
        @max_retries = options.fetch(:max_retries, Sidekiq::Middleware::Server::RetryJobs::DEFAULT_MAX_RETRY_ATTEMPTS)
      end

      def call(_worker, msg, _queue)
        yield
      rescue Sidekiq::InstantlyDeadError
        raise unless msg['retry']

        unless msg['dead'] == false
          max_retry_attempts = retry_attempts_from(msg['retry'], @max_retries)

          msg['retry_count'] = max_retry_attempts

          Sidekiq.logger.debug { "Increase retry_count to max_retry_attempt(#{max_retry_attempt}) to instantly dead" }
        end

        raise
      end

      private

      def retry_attempts_from(msg_retry, default)
        if Fixnum === msg_retry
          msg_retry
        else
          default
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sidekiq-instantly_dead-0.1.0 lib/sidekiq/instantly_dead.rb