diff options
author | Kamil Trzciński <ayufan@ayufan.eu> | 2018-02-07 12:46:50 +0000 |
---|---|---|
committer | Kamil Trzciński <ayufan@ayufan.eu> | 2018-02-07 12:46:50 +0000 |
commit | 2122d7225012b48bad8121e617bc1dbb06f67cf3 (patch) | |
tree | c97494fb0bf78471725d230d463f44c069b84b01 /app | |
parent | 9bd044d9a74b6dd2fa252ed085562d56aef5a6ac (diff) | |
parent | 394c1c65883883d5ac8bcbeecd9fe05b1d3fd87b (diff) | |
download | gitlab-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.rb | 12 | ||||
-rw-r--r-- | app/services/ci/retry_build_service.rb | 2 |
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 |