summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-04-24 16:00:49 +0000
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-04-24 16:00:49 +0000
commit444cac6552365f14d3b21b3d1743bc2f0d683a0e (patch)
treed7577bb7f5d2f08902482458562a390bdabb2a08
parent0783a65989b2a99122fc78b578e583e775975399 (diff)
parent96ddc548f549ff7101588a0fbf923f9e523f9dfe (diff)
downloadgitlab-ci-444cac6552365f14d3b21b3d1743bc2f0d683a0e.tar.gz
Merge branch 'concurent_runners' into 'master'
Resolve situation with concurent runners registration https://dev.gitlab.org/gitlab/gitlab-ci/issues/209 https://github.com/gitlabhq/gitlab-ci/issues/458 See merge request !82
-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