Sha256: 6cffd75dd42c6c59c082e04bee03594dc0d05712ab9cad62a58b981aa06607fb

Contents?: true

Size: 894 Bytes

Versions: 4

Compression:

Stored size: 894 Bytes

Contents

require 'digest'

if defined?(Sidekiq)
  module Sidekiq
    module Middleware
      module Client
        class UniqueJobs
          HASH_KEY_EXPIRATION = 30 * 60
  
          def call(worker_class, item, queue)
            enabled = worker_class.get_sidekiq_options['unique']
            if enabled
              payload_hash = Digest::MD5.hexdigest(Sidekiq.dump_json(item))
              unique = false
  
              Sidekiq.redis do |conn|
                conn.watch(payload_hash)
  
                if conn.get(payload_hash)
                  conn.unwatch
                else
                  unique = conn.multi do
                    conn.setex(payload_hash, HASH_KEY_EXPIRATION, 1)
                  end
                end
              end
              yield if unique
            else
              yield
            end
          end
  
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
recommendable-1.1.7 lib/sidekiq/middleware/client/unique_jobs.rb
recommendable-1.1.6 lib/sidekiq/middleware/client/unique_jobs.rb
recommendable-1.1.5 lib/sidekiq/middleware/client/unique_jobs.rb
recommendable-1.1.4 lib/sidekiq/middleware/client/unique_jobs.rb