summaryrefslogtreecommitdiff
path: root/app/services/ci
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-02-05 16:47:34 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-02-05 16:47:34 +0100
commit538ad92a1cdbf145106c6e49a6669da02fe94543 (patch)
tree574bf72f62cd01bc64c3b58107a3344ba8a262e4 /app/services/ci
parentb5c69ce3abed5f8269dee256fca02d3e74b30347 (diff)
downloadgitlab-ce-538ad92a1cdbf145106c6e49a6669da02fe94543.tar.gz
Fix transactions-related race condition in stages code
Diffstat (limited to 'app/services/ci')
-rw-r--r--app/services/ci/ensure_stage_service.rb7
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