Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/workers/issue_placement_worker.rb')
-rw-r--r--app/workers/issue_placement_worker.rb71
1 files changed, 0 insertions, 71 deletions
diff --git a/app/workers/issue_placement_worker.rb b/app/workers/issue_placement_worker.rb
deleted file mode 100644
index 26dec221f45..00000000000
--- a/app/workers/issue_placement_worker.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-# frozen_string_literal: true
-
-# DEPRECATED. Will be removed in 14.7 https://gitlab.com/gitlab-org/gitlab/-/merge_requests/72803
-# Please use Issues::PlacementWorker instead
-#
-# todo: remove this worker and it's queue definition from all_queues after Issues::PlacementWorker is deployed
-# 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.
-class IssuePlacementWorker
- include ApplicationWorker
-
- data_consistency :always
-
- sidekiq_options retry: 3
-
- idempotent!
- deduplicate :until_executed, including_scheduled: true
- feature_category :team_planning
- urgency :high
- worker_resource_boundary :cpu
- weight 2
-
- # Move at most the most recent 100 issues
- QUERY_LIMIT = 100
-
- # rubocop: disable CodeReuse/ActiveRecord
- def perform(issue_id, project_id = nil)
- issue = find_issue(issue_id, project_id)
- return unless issue
-
- # Temporary disable moving null elements because of performance problems
- # For more information check https://gitlab.com/gitlab-com/gl-infra/production/-/issues/4321
- return if issue.blocked_for_repositioning?
-
- # Move the oldest 100 unpositioned items to the end.
- # This is to deal with out-of-order execution of the worker,
- # while preserving creation order.
- to_place = Issue
- .relative_positioning_query_base(issue)
- .with_null_relative_position
- .order({ created_at: :asc }, { id: :asc })
- .limit(QUERY_LIMIT + 1)
- .to_a
-
- leftover = to_place.pop if to_place.count > QUERY_LIMIT
-
- Issue.move_nulls_to_end(to_place)
- Issues::BaseService.new(project: nil).rebalance_if_needed(to_place.max_by(&:relative_position))
- Issues::PlacementWorker.perform_async(nil, leftover.project_id) if leftover.present?
- rescue RelativePositioning::NoSpaceLeft => e
- Gitlab::ErrorTracking.log_exception(e, issue_id: issue_id, project_id: project_id)
- Issues::RebalancingWorker.perform_async(nil, *root_namespace_id_to_rebalance(issue, project_id))
- end
-
- def find_issue(issue_id, project_id)
- return Issue.id_in(issue_id).take if issue_id
-
- project = Project.id_in(project_id).take
- return unless project
-
- project.issues.take
- end
- # rubocop: enable CodeReuse/ActiveRecord
-
- private
-
- def root_namespace_id_to_rebalance(issue, project_id)
- project_id = project_id.presence || issue.project_id
- Project.find(project_id)&.self_or_root_group_ids
- end
-end