summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorKamil Trzciński <ayufan@ayufan.eu>2018-02-07 12:46:50 +0000
committerKamil Trzciński <ayufan@ayufan.eu>2018-02-07 12:46:50 +0000
commit2122d7225012b48bad8121e617bc1dbb06f67cf3 (patch)
treec97494fb0bf78471725d230d463f44c069b84b01 /app
parent9bd044d9a74b6dd2fa252ed085562d56aef5a6ac (diff)
parent394c1c65883883d5ac8bcbeecd9fe05b1d3fd87b (diff)
downloadgitlab-ce-2122d7225012b48bad8121e617bc1dbb06f67cf3.tar.gz
Merge branch 'fix/gb/fix-redundant-pipeline-stages' into 'master'
Remove redundant pipeline stages from the database Closes #41769 See merge request gitlab-org/gitlab-ce!16580
Diffstat (limited to 'app')
-rw-r--r--app/services/ci/ensure_stage_service.rb12
-rw-r--r--app/services/ci/retry_build_service.rb2
2 files changed, 12 insertions, 2 deletions
diff --git a/app/services/ci/ensure_stage_service.rb b/app/services/ci/ensure_stage_service.rb
index dc2f49e8db1..87f19b333de 100644
--- a/app/services/ci/ensure_stage_service.rb
+++ b/app/services/ci/ensure_stage_service.rb
@@ -7,6 +7,8 @@ module Ci
# stage.
#
class EnsureStageService < BaseService
+ EnsureStageError = Class.new(StandardError)
+
def execute(build)
@build = build
@@ -22,8 +24,16 @@ module Ci
private
- def ensure_stage
+ def ensure_stage(attempts: 2)
find_stage || create_stage
+ rescue ActiveRecord::RecordNotUnique
+ retry if (attempts -= 1) > 0
+
+ raise EnsureStageError, <<~EOS
+ We failed to find or create a unique pipeline stage after 2 retries.
+ This should never happen and is most likely the result of a bug in
+ the database load balancing code.
+ EOS
end
def find_stage
diff --git a/app/services/ci/retry_build_service.rb b/app/services/ci/retry_build_service.rb
index c552193e66b..6128b2a8fbb 100644
--- a/app/services/ci/retry_build_service.rb
+++ b/app/services/ci/retry_build_service.rb
@@ -1,7 +1,7 @@
module Ci
class RetryBuildService < ::BaseService
CLONE_ACCESSORS = %i[pipeline project ref tag options commands name
- allow_failure stage_id stage stage_idx trigger_request
+ allow_failure stage stage_id stage_idx trigger_request
yaml_variables when environment coverage_regex
description tag_list protected].freeze