Class: IssueRebalancingWorker

Inherits:
Object
  • Object
show all
Includes:
ApplicationWorker
Defined in:
app/workers/issue_rebalancing_worker.rb

Overview

DEPRECATED. Will be removed in 14.7 gitlab.com/gitlab-org/gitlab/-/merge_requests/72803 Please use Issues::RebalancingWorker instead

todo: remove this worker and it's queue definition from all_queues after Issue::RebalancingWorker is released. We want to keep it for one release in case some jobs are already scheduled in the old queue so we need the worker to be available to finish those. All new jobs will be queued into the new queue.

Constant Summary

Constants included from ApplicationWorker

ApplicationWorker::LOGGING_EXTRA_KEY, ApplicationWorker::SAFE_PUSH_BULK_LIMIT

Constants included from WorkerAttributes

WorkerAttributes::DEFAULT_DATA_CONSISTENCY, WorkerAttributes::NAMESPACE_WEIGHTS, WorkerAttributes::VALID_DATA_CONSISTENCIES, WorkerAttributes::VALID_RESOURCE_BOUNDARIES, WorkerAttributes::VALID_URGENCIES

Instance Method Summary collapse

Methods included from Gitlab::SidekiqVersioning::Worker

#job_version

Methods included from WorkerContext

#with_context

Instance Method Details

#perform(ignore = nil, project_id = nil, root_namespace_id = nil) ⇒ Object


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
# File 'app/workers/issue_rebalancing_worker.rb', line 21

def perform(ignore = nil, project_id = nil, root_namespace_id = nil)
  # we need to have exactly one of the project_id and root_namespace_id params be non-nil
  raise ArgumentError, "Expected only one of the params project_id: #{project_id} and root_namespace_id: #{root_namespace_id}" if project_id && root_namespace_id
  return if project_id.nil? && root_namespace_id.nil?
  return if ::Gitlab::Issues::Rebalancing::State.rebalance_recently_finished?(project_id, root_namespace_id)

  # pull the projects collection to be rebalanced either the project if namespace is not a group(i.e. user namesapce)
  # or the root namespace, this also makes the worker backward compatible with previous version where a project_id was
  # passed as the param
  projects_to_rebalance = projects_collection(project_id, root_namespace_id)

  # something might have happened with the namespace between scheduling the worker and actually running it,
  # maybe it was removed.
  if projects_to_rebalance.blank?
    Gitlab::ErrorTracking.log_exception(
      ArgumentError.new("Projects to be rebalanced not found for arguments: project_id #{project_id}, root_namespace_id: #{root_namespace_id}"),
      { project_id: project_id, root_namespace_id: root_namespace_id })

    return
  end

  Issues::RelativePositionRebalancingService.new(projects_to_rebalance).execute
rescue Issues::RelativePositionRebalancingService::TooManyConcurrentRebalances => e
  Gitlab::ErrorTracking.log_exception(e, root_namespace_id: root_namespace_id, project_id: project_id)
end