diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-02-14 13:29:58 +0100 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-02-14 13:29:58 +0100 |
commit | 056f1b702042382c99dcfdaf1e292bf68b8f55ba (patch) | |
tree | 38fa1c55ce9c67ac48faa1d35dfb9d68561af25c /app/services/ci/retry_pipeline_service.rb | |
parent | 94495f984c0a81d32b6f748fd977848dc5c6721e (diff) | |
download | gitlab-ce-056f1b702042382c99dcfdaf1e292bf68b8f55ba.tar.gz |
Simplify implementation of pipeline retry service
Diffstat (limited to 'app/services/ci/retry_pipeline_service.rb')
-rw-r--r-- | app/services/ci/retry_pipeline_service.rb | 42 |
1 files changed, 5 insertions, 37 deletions
diff --git a/app/services/ci/retry_pipeline_service.rb b/app/services/ci/retry_pipeline_service.rb index 1b931455fb8..8a1a9191478 100644 --- a/app/services/ci/retry_pipeline_service.rb +++ b/app/services/ci/retry_pipeline_service.rb @@ -1,57 +1,25 @@ module Ci class RetryPipelineService < ::BaseService def execute(pipeline) - @pipeline = pipeline - unless can?(current_user, :update_pipeline, pipeline) raise Gitlab::Access::AccessDeniedError end - pipeline.mark_as_processable_after_stage(resume_stage.index) + each_build(pipeline.builds.failed_or_canceled) do |build| + next unless build.retryable? - retryable_builds_in_subsequent_stages do |build| Ci::RetryBuildService.new(project, current_user) .reprocess(build) end - retryable_builds_in_first_unsuccessful_stage do |build| - Ci::RetryBuildService.new(project, current_user) - .retry(build) - end + pipeline.process! end private - def retryable_builds_in_subsequent_stages - relation = @pipeline.builds - .after_stage(resume_stage.index) - .failed_or_canceled - - each_retryable_build_with_locking(relation) do |build| - yield build - end - end - - def retryable_builds_in_first_unsuccessful_stage - relation = resume_stage.builds.failed_or_canceled - - each_retryable_build_with_locking(relation) do |build| - yield build - end - end - - def each_retryable_build_with_locking(relation) + def each_build(relation) Gitlab::OptimisticLocking.retry_lock(relation) do |builds| - builds.find_each do |build| - next unless build.retryable? - yield build - end - end - end - - def resume_stage - @resume_stage ||= @pipeline.stages.find do |stage| - stage.failed? || stage.canceled? + builds.find_each { |build| yield build } end end end |