class SidekiqUniqueJobs::Digests
Class Changelogs provides access to the changelog entries
@author Mikael Henriksson <mikael@mhenrixon.com>
Constants
- DEFAULT_COUNT
-
@return [Integer] the number of matches to return by default
- EMPTY_KEYS_SEGMENT
-
@return [Array(String, String, String, String)] The empty runtime or queuetime keys.
- SCAN_PATTERN
-
@return [String] the default pattern to use for matching
Public Class Methods
Source
# File lib/sidekiq_unique_jobs/digests.rb, line 20 def initialize(digests_key = DIGESTS) super end
Public Instance Methods
Source
# File lib/sidekiq_unique_jobs/digests.rb, line 29 def add(digest) redis { |conn| conn.zadd(key, now_f, digest) } end
Adds a digest
@param [String] digest the digest to add
Source
# File lib/sidekiq_unique_jobs/digests.rb, line 56 def delete_by_digest(digest, queuetime: true, runtime: true) result, elapsed = timed do call_script( :delete_by_digest, queuetime_keys(queuetime ? digest : nil) + runtime_keys(runtime ? digest : nil) + [key], ) end log_info("#{__method__}(#{digest}) completed in #{elapsed}ms") result end
Delete unique digests by digest
Also deletes the :AVAILABLE, :EXPIRED etc keys
@param [String] digest a unique digest to delete @param queuetime [Boolean] Whether to delete queue locks. @param runtime [Boolean] Whether to delete run locks.
Source
# File lib/sidekiq_unique_jobs/digests.rb, line 39 def delete_by_pattern(pattern, count: DEFAULT_COUNT) result, elapsed = timed do digests = entries(pattern: pattern, count: count).keys redis { |conn| BatchDelete.call(digests, conn) } end log_info("#{__method__}(#{pattern}, count: #{count}) completed in #{elapsed}ms") result end
Deletes unique digests by pattern
@param [String] pattern a key pattern to match with @param [Integer] count the maximum number @return [Hash<String,Float>] Hash
mapping of digest matching the given pattern and score
Source
# File lib/sidekiq_unique_jobs/digests.rb, line 77 def entries(pattern: SCAN_PATTERN, count: DEFAULT_COUNT) redis { |conn| conn.zscan(key, match: pattern, count: count).to_a }.to_h end
The entries in this sorted set
@param [String] pattern SCAN_PATTERN
the match pattern to search for @param [Integer] count DEFAULT_COUNT
the number of entries to return
@return [Array<String>] an array of digests matching the given pattern
Source
# File lib/sidekiq_unique_jobs/digests.rb, line 90 def page(cursor: 0, pattern: SCAN_PATTERN, page_size: 100) redis do |conn| total_size, digests = conn.multi do |pipeline| pipeline.zcard(key) pipeline.zscan(key, cursor, match: pattern, count: page_size) end # NOTE: When debugging, check the last item in the returned array. [ total_size.to_i, digests[0].to_i, # next_cursor digests[1].each_slice(2).map { |digest, score| Lock.new(digest, time: score) }, # entries ] end end
Returns a paginated
@param [Integer] cursor the cursor for this iteration @param [String] pattern SCAN_PATTERN
the match pattern to search for @param [Integer] page_size 100 the size per page
@return [Array<Integer, Integer, Array
<Lock>>] total_size, next_cursor, locks
Private Instance Methods
Source
# File lib/sidekiq_unique_jobs/digests.rb, line 123 def queuetime_keys(digest) return EMPTY_KEYS_SEGMENT unless digest [ digest, "#{digest}:QUEUED", "#{digest}:PRIMED", "#{digest}:LOCKED", ] end
@param digest [String, nil] The digest to form queuetime keys from. @return [Array(String, String, String, String)] The list of queuetime keys or empty strings if digest
was nil
.
Source
# File lib/sidekiq_unique_jobs/digests.rb, line 110 def runtime_keys(digest) return EMPTY_KEYS_SEGMENT unless digest [ "#{digest}:RUN", "#{digest}:RUN:QUEUED", "#{digest}:RUN:PRIMED", "#{digest}:RUN:LOCKED", ] end
@param digest [String, nil] The digest to form runtime keys from. @return [Array(String, String, String, String)] The list of runtime keys or empty strings if digest
was nil
.