summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValery Sizov <vsv2711@gmail.com>2015-04-24 18:27:26 +0300
committerValery Sizov <vsv2711@gmail.com>2015-04-24 18:32:13 +0300
commit96ddc548f549ff7101588a0fbf923f9e523f9dfe (patch)
treed7577bb7f5d2f08902482458562a390bdabb2a08
parent0783a65989b2a99122fc78b578e583e775975399 (diff)
downloadgitlab-ci-96ddc548f549ff7101588a0fbf923f9e523f9dfe.tar.gz
resolve situation with concurent ruuners registration
-rw-r--r--app/services/register_build_service.rb7
1 files changed, 6 insertions, 1 deletions
diff --git a/app/services/register_build_service.rb b/app/services/register_build_service.rb
index cbb9b5f..e0f1659 100644
--- a/app/services/register_build_service.rb
+++ b/app/services/register_build_service.rb
@@ -25,7 +25,9 @@ class RegisterBuildService
end
if build
- ActiveRecord::Base.transaction do
+ # In case when 2 runners try to assign the same build, second runner will be declined
+ # with StateMachine::InvalidTransition in run! method.
+ build.with_lock do
build.runner_id = current_runner.id
build.save!
build.run!
@@ -33,5 +35,8 @@ class RegisterBuildService
end
build
+
+ rescue StateMachine::InvalidTransition
+ nil
end
end