summaryrefslogtreecommitdiff
path: root/app/workers/schedule_merge_request_cleanup_refs_worker.rb
blob: 967032f99e599f70d753654feb7ad0249cb57ad4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# frozen_string_literal: true

class ScheduleMergeRequestCleanupRefsWorker
  include ApplicationWorker
  include CronjobQueue # rubocop:disable Scalability/CronWorkerContext

  feature_category :code_review
  idempotent!

  # Based on existing data, MergeRequestCleanupRefsWorker can run 3 jobs per
  # second. This means that 180 jobs can be performed but since there are some
  # spikes from time time, it's better to give it some allowance.
  LIMIT = 180
  DELAY = 10.seconds
  BATCH_SIZE = 30

  def perform
    return if Gitlab::Database.read_only?
    return unless Feature.enabled?(:merge_request_refs_cleanup, default_enabled: false)

    ids = MergeRequest::CleanupSchedule.scheduled_merge_request_ids(LIMIT).map { |id| [id] }

    MergeRequestCleanupRefsWorker.bulk_perform_in(DELAY, ids, batch_size: BATCH_SIZE) # rubocop:disable Scalability/BulkPerformWithContext

    log_extra_metadata_on_done(:merge_requests_count, ids.size)
  end
end