Class: Gitlab::SidekiqQueue

Inherits:
Object
  • Object
show all
Includes:
Utils::StrongMemoize
Defined in:
lib/gitlab/sidekiq_queue.rb

Constant Summary collapse

NoMetadataError =
Class.new(StandardError)
InvalidQueueError =
Class.new(StandardError)
WORKER_KEY =
'worker_class'
ALLOWED_KEYS =
Gitlab::ApplicationContext.allowed_job_keys.map(&:to_s) + [WORKER_KEY]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(queue_name) ⇒ SidekiqQueue

Returns a new instance of SidekiqQueue.



15
16
17
# File 'lib/gitlab/sidekiq_queue.rb', line 15

def initialize(queue_name)
  @queue_name = queue_name
end

Instance Attribute Details

#queue_nameObject (readonly)

Returns the value of attribute queue_name.



13
14
15
# File 'lib/gitlab/sidekiq_queue.rb', line 13

def queue_name
  @queue_name
end

Instance Method Details

#drop_jobs!(search_metadata, timeout:) ⇒ Object

Raises:



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/gitlab/sidekiq_queue.rb', line 19

def drop_jobs!(, timeout:)
  start_time = monotonic_time
  completed = true
  deleted_jobs = 0

   =
    
      .stringify_keys
      .slice(*ALLOWED_KEYS)
      .transform_keys(&method(:transform_key))
      .compact

  raise NoMetadataError if .empty?
  raise InvalidQueueError if sidekiq_queues.values.compact.empty?

  Gitlab::Redis::Queues.instances.map do |key, instance|
    queue = sidekiq_queues[key]
    next if queue.nil?

    Sidekiq::Client.via(instance.sidekiq_redis) do
      queue.each do |job|
        if timeout_exceeded?(start_time, timeout)
          completed = false
          break
        end

        next unless job_matches?(job, )

        job.delete
        deleted_jobs += 1
      end
    end
  end

  {
    completed: completed,
    deleted_jobs: deleted_jobs,
    queue_size: queue_size
  }
end