Sha256: 0f9e38b5294356eac505b7487f436c0338e58953d50c27a192fa228498774259

Contents?: true

Size: 1.47 KB

Versions: 1

Compression:

Stored size: 1.47 KB

Contents

# frozen_string_literal: true

# @api private
# @since 1.0.0
module RedisQueuedLocks::Acquier::ClearDeadRequests
  class << self
    # @param redis_client [RedisClient]
    # @param scan_size [Integer]
    # @param dead_ttl [Integer] In milliseconds
    # @param logger [::Logger,#debug]
    # @param instrumenter [#notify]
    # @param instrument [NilClass,Any]
    # @return [Hash<Symbol,Boolean|Hash<Symbol,Set<String>>>]
    #
    # @api private
    # @since 1.0.0
    def clear_dead_requests(redis_client, scan_size, dead_ttl, logger, instrumenter, instrument)
      dead_score = RedisQueuedLocks::Resource.acquier_dead_score(dead_ttl / 1000.0)

      result = Set.new.tap do |processed_queues|
        redis_client.with do |rconn|
          each_lock_queue(rconn, scan_size) do |lock_queue|
            rconn.call('ZREMRANGEBYSCORE', lock_queue, '-inf', dead_score)
            processed_queues << lock_queue
          end
        end
      end

      RedisQueuedLocks::Data[ok: true, result: { processed_queues: result }]
    end

    private

    # @param redis_client [RedisClient]
    # @param scan_size [Integer]
    # @yield [lock_queue]
    # @yieldparam lock_queue [String]
    # @yieldreturn [void]
    # @return [Enumerator]
    #
    # @api private
    # @since 1.0.0
    def each_lock_queue(redis_client, scan_size, &block)
      redis_client.scan(
        'MATCH',
        RedisQueuedLocks::Resource::LOCK_QUEUE_PATTERN,
        count: scan_size,
        &block
      )
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
redis_queued_locks-1.2.0 lib/redis_queued_locks/acquier/clear_dead_requests.rb