summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-01-18 00:24:03 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-01-18 00:24:03 +0000
commitcfa5faaae0d9ac9a3c1fafb1a41e07b298029f48 (patch)
treeb7ce1807d00c85cb94cbdc4a031562623e5343d6 /app
parentab5b519cca2356dd2b84a7fffc6ddbd6dc43a0ab (diff)
downloadgitlab-ce-cfa5faaae0d9ac9a3c1fafb1a41e07b298029f48.tar.gz
Add latest changes from gitlab-org/gitlab@14-6-stable-ee
Diffstat (limited to 'app')
-rw-r--r--app/services/ci/after_requeue_job_service.rb45
1 files changed, 28 insertions, 17 deletions
diff --git a/app/services/ci/after_requeue_job_service.rb b/app/services/ci/after_requeue_job_service.rb
index 9101ae91967..ee0ae6651ca 100644
--- a/app/services/ci/after_requeue_job_service.rb
+++ b/app/services/ci/after_requeue_job_service.rb
@@ -3,39 +3,50 @@
module Ci
class AfterRequeueJobService < ::BaseService
def execute(processable)
- process_subsequent_jobs(processable)
- reset_source_bridge(processable)
+ @processable = processable
+
+ process_subsequent_jobs
+ reset_source_bridge
end
private
- def process_subsequent_jobs(processable)
- (stage_dependent_jobs(processable) | needs_dependent_jobs(processable))
- .each do |processable|
- process(processable)
+ def process_subsequent_jobs
+ dependent_jobs.each do |job|
+ process(job)
end
end
- def reset_source_bridge(processable)
- processable.pipeline.reset_source_bridge!(current_user)
+ def reset_source_bridge
+ @processable.pipeline.reset_source_bridge!(current_user)
+ end
+
+ def dependent_jobs
+ if ::Feature.enabled?(:ci_order_subsequent_jobs_by_stage, @processable.pipeline.project, default_enabled: :yaml)
+ stage_dependent_jobs
+ .or(needs_dependent_jobs.except(:preload))
+ .ordered_by_stage
+ else
+ stage_dependent_jobs | needs_dependent_jobs
+ end
end
- def process(processable)
- Gitlab::OptimisticLocking.retry_lock(processable, name: 'ci_requeue_job') do |processable|
- processable.process(current_user)
+ def process(job)
+ Gitlab::OptimisticLocking.retry_lock(job, name: 'ci_requeue_job') do |job|
+ job.process(current_user)
end
end
- def skipped_jobs(processable)
- processable.pipeline.processables.skipped
+ def stage_dependent_jobs
+ skipped_jobs.after_stage(@processable.stage_idx)
end
- def stage_dependent_jobs(processable)
- skipped_jobs(processable).after_stage(processable.stage_idx)
+ def needs_dependent_jobs
+ skipped_jobs.scheduling_type_dag.with_needs([@processable.name])
end
- def needs_dependent_jobs(processable)
- skipped_jobs(processable).scheduling_type_dag.with_needs([processable.name])
+ def skipped_jobs
+ @skipped_jobs ||= @processable.pipeline.processables.skipped
end
end
end