summaryrefslogtreecommitdiff
path: root/app/workers/issue_rebalancing_worker.rb
blob: 9eac451f107c2f1f671f076fc727c4337d453d9d (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
28
29
# frozen_string_literal: true

class IssueRebalancingWorker
  include ApplicationWorker

  sidekiq_options retry: 3

  idempotent!
  urgency :low
  feature_category :issue_tracking
  tags :exclude_from_kubernetes

  def perform(ignore = nil, project_id = nil)
    return if project_id.nil?

    project = Project.find(project_id)

    # Temporary disable reabalancing for performance reasons
    # For more information check https://gitlab.com/gitlab-com/gl-infra/production/-/issues/4321
    return if project.root_namespace&.issue_repositioning_disabled?

    # All issues are equivalent as far as we are concerned
    issue = project.issues.take # rubocop: disable CodeReuse/ActiveRecord

    IssueRebalancingService.new(issue).execute
  rescue ActiveRecord::RecordNotFound, IssueRebalancingService::TooManyIssues => e
    Gitlab::ErrorTracking.log_exception(e, project_id: project_id)
  end
end