Class: Issues::RebalancingWorker

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

Constant Summary

Constants included from ApplicationWorker

ApplicationWorker::LOGGING_EXTRA_KEY, ApplicationWorker::SAFE_PUSH_BULK_LIMIT

Constants included from Gitlab::Loggable

Gitlab::Loggable::ANONYMOUS

Constants included from WorkerAttributes

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

Instance Method Summary collapse

Methods included from Gitlab::Loggable

#build_structured_payload

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



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'app/workers/issues/rebalancing_worker.rb', line 16

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 namespace)
  # 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