Sha256: f3810ab8fa8f22ddf74a98a05432aea7e29a4a9df15b2d4eccad0990007ea876

Contents?: true

Size: 823 Bytes

Versions: 7

Compression:

Stored size: 823 Bytes

Contents

require 'multi_json'
require 'digest'

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(MultiJson.encode(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

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
sidekiq-1.1.2 lib/sidekiq/middleware/client/unique_jobs.rb
sidekiq-1.1.1 lib/sidekiq/middleware/client/unique_jobs.rb
sidekiq-1.1.0 lib/sidekiq/middleware/client/unique_jobs.rb
sidekiq-1.0.0 lib/sidekiq/middleware/client/unique_jobs.rb
sidekiq-0.11.2 lib/sidekiq/middleware/client/unique_jobs.rb
sidekiq-0.11.1 lib/sidekiq/middleware/client/unique_jobs.rb
sidekiq-0.11.0 lib/sidekiq/middleware/client/unique_jobs.rb