diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2018-02-05 16:47:34 +0100 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2018-02-05 16:47:34 +0100 |
commit | 538ad92a1cdbf145106c6e49a6669da02fe94543 (patch) | |
tree | 574bf72f62cd01bc64c3b58107a3344ba8a262e4 /app | |
parent | b5c69ce3abed5f8269dee256fca02d3e74b30347 (diff) | |
download | gitlab-ce-538ad92a1cdbf145106c6e49a6669da02fe94543.tar.gz |
Fix transactions-related race condition in stages code
Diffstat (limited to 'app')
-rw-r--r-- | app/services/ci/ensure_stage_service.rb | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/app/services/ci/ensure_stage_service.rb b/app/services/ci/ensure_stage_service.rb index dc2f49e8db1..9a48f7096cf 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 + PipelineStageError = Class.new(StandardError) + def execute(build) @build = build @@ -22,8 +24,11 @@ module Ci private - def ensure_stage + def ensure_stage(attempts: 2) find_stage || create_stage + rescue ActiveRecord::RecordNotUnique + retry if (attempts -= 1) > 0 + raise PipelineStageError, 'Fix me!' end def find_stage |