1# frozen_string_literal: true 2 3module Issues 4 class RescheduleStuckIssueRebalancesWorker 5 include ApplicationWorker 6 include CronjobQueue 7 8 data_consistency :sticky 9 10 idempotent! 11 urgency :low 12 feature_category :team_planning 13 deduplicate :until_executed, including_scheduled: true 14 15 def perform 16 namespace_ids, project_ids = ::Gitlab::Issues::Rebalancing::State.fetch_rebalancing_groups_and_projects 17 18 return if namespace_ids.blank? && project_ids.blank? 19 20 namespaces = Namespace.id_in(namespace_ids) 21 projects = Project.id_in(project_ids) 22 23 Issues::RebalancingWorker.bulk_perform_async_with_contexts( 24 namespaces, 25 arguments_proc: -> (namespace) { [nil, nil, namespace.id] }, 26 context_proc: -> (namespace) { { namespace: namespace } } 27 ) 28 29 Issues::RebalancingWorker.bulk_perform_async_with_contexts( 30 projects, 31 arguments_proc: -> (project) { [nil, project.id, nil] }, 32 context_proc: -> (project) { { project: project } } 33 ) 34 end 35 end 36end 37