Sha256: a79da0db57626aa57745e44c50772aabd053ad54b631c100177cc790265ea315

Contents?: true

Size: 812 Bytes

Versions: 1

Compression:

Stored size: 812 Bytes

Contents

require 'digest'

module SidekiqUniqueJobs
  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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sidekiq-unique-jobs-2.1.0 lib/sidekiq-unique-jobs/middleware/client/unique_jobs.rb