summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShinya Maeda <shinya@gitlab.com>2019-01-08 19:04:22 +0900
committerShinya Maeda <shinya@gitlab.com>2019-01-10 13:58:38 +0900
commitc471ba42e09cb3a8a9c4f0f83a79ee936456b3ef (patch)
treee0781fca08001ab0e2a94e196e6fc7a8349fdba0
parentb2e807e62464a77dd9f4c50f4b339d4cd4f89718 (diff)
downloadgitlab-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.rb4
-rw-r--r--app/services/merge_requests/base_service.rb6
-rw-r--r--changelogs/unreleased/fix-a-small-race-condition-on-mr-pipelines-guard.yml5
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