diff options
author | Shinya Maeda <shinya@gitlab.com> | 2019-01-08 19:04:22 +0900 |
---|---|---|
committer | Shinya Maeda <shinya@gitlab.com> | 2019-01-10 13:58:38 +0900 |
commit | c471ba42e09cb3a8a9c4f0f83a79ee936456b3ef (patch) | |
tree | e0781fca08001ab0e2a94e196e6fc7a8349fdba0 | |
parent | b2e807e62464a77dd9f4c50f4b339d4cd4f89718 (diff) | |
download | gitlab-ce-fix-a-small-race-condition-on-mr-pipelines-guard.tar.gz |
Fix a small race condition on MR pipelines guardfix-a-small-race-condition-on-mr-pipelines-guard
Add changelog
Fix
-rw-r--r-- | app/models/merge_request.rb | 4 | ||||
-rw-r--r-- | app/services/merge_requests/base_service.rb | 6 | ||||
-rw-r--r-- | changelogs/unreleased/fix-a-small-race-condition-on-mr-pipelines-guard.yml | 5 |
3 files changed, 11 insertions, 4 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 5310f2ee765..cf3d2df100a 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -1113,8 +1113,8 @@ class MergeRequest < ActiveRecord::Base update_column(:head_pipeline_id, head_pipeline.id) if head_pipeline_id_changed? end - def merge_request_pipeline_exists? - merge_request_pipelines.exists?(sha: diff_head_sha) + def merge_request_pipeline_exists?(sha) + merge_request_pipelines.exists?(sha: sha) end def has_test_reports? diff --git a/app/services/merge_requests/base_service.rb b/app/services/merge_requests/base_service.rb index fe19abf50f6..c29f139bfee 100644 --- a/app/services/merge_requests/base_service.rb +++ b/app/services/merge_requests/base_service.rb @@ -59,13 +59,15 @@ module MergeRequests merge_request.source_project, default_enabled: true) + sha = merge_request.diff_head_sha + ## # UpdateMergeRequestsWorker could be retried by an exception. # MR pipelines should not be recreated in such case. - return if merge_request.merge_request_pipeline_exists? + return if !sha || merge_request.merge_request_pipeline_exists?(sha) Ci::CreatePipelineService - .new(merge_request.source_project, user, ref: merge_request.source_branch) + .new(merge_request.source_project, user, ref: merge_request.source_branch, checkout_sha: sha) .execute(:merge_request, ignore_skip_ci: true, save_on_errors: false, diff --git a/changelogs/unreleased/fix-a-small-race-condition-on-mr-pipelines-guard.yml b/changelogs/unreleased/fix-a-small-race-condition-on-mr-pipelines-guard.yml new file mode 100644 index 00000000000..0c983246efb --- /dev/null +++ b/changelogs/unreleased/fix-a-small-race-condition-on-mr-pipelines-guard.yml @@ -0,0 +1,5 @@ +--- +title: Fix a small race condition of MR pipeline creation +merge_request: 24221 +author: +type: fixed |