diff options
-rw-r--r-- | app/services/ci/create_pipeline_service.rb | 16 | ||||
-rw-r--r-- | changelogs/unreleased/fix-deadlock-updating-mrs.yml | 4 |
2 files changed, 15 insertions, 5 deletions
diff --git a/app/services/ci/create_pipeline_service.rb b/app/services/ci/create_pipeline_service.rb index 4f35255fb53..3e8f34fbb1c 100644 --- a/app/services/ci/create_pipeline_service.rb +++ b/app/services/ci/create_pipeline_service.rb @@ -47,14 +47,20 @@ module Ci return error('No stages / jobs for this pipeline.') end - Ci::Pipeline.transaction do - update_merge_requests_head_pipeline if pipeline.save + begin + Ci::Pipeline.transaction do + pipeline.save! - Ci::CreatePipelineStagesService - .new(project, current_user) - .execute(pipeline) + Ci::CreatePipelineStagesService + .new(project, current_user) + .execute(pipeline) + end + rescue ActiveRecord::RecordInvalid => e + return error("Failed to persist the pipeline: #{e}") end + update_merge_requests_head_pipeline + cancel_pending_pipelines if project.auto_cancel_pending_pipelines? pipeline_created_counter.increment(source: source) diff --git a/changelogs/unreleased/fix-deadlock-updating-mrs.yml b/changelogs/unreleased/fix-deadlock-updating-mrs.yml new file mode 100644 index 00000000000..67119f46313 --- /dev/null +++ b/changelogs/unreleased/fix-deadlock-updating-mrs.yml @@ -0,0 +1,4 @@ +--- +title: Prevent deadlock when pushing to an existing merge request with CI enabled +merge_request: +author: |