diff options
author | Grzegorz Bizon <grzegorz@gitlab.com> | 2017-01-25 21:14:56 +0300 |
---|---|---|
committer | Grzegorz Bizon <grzegorz@gitlab.com> | 2017-01-25 21:14:56 +0300 |
commit | 637894de8868b05499a275e1685621473addef58 (patch) | |
tree | 017f01e30effce8f80cfae61be5296e318f55cdb /lib | |
parent | 6cfe60df2275dace9804f4bc37b9746a9eadc6fd (diff) | |
parent | 31be74c74b72a1cd33e1630f9462ab5c43f2e319 (diff) |
Merge branch 'fix-ci-requests-concurrency' into 'master'
Fix CI requests concurrency
See merge request !8760
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ci/api/builds.rb | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/lib/ci/api/builds.rb b/lib/ci/api/builds.rb index a9da8ea7eeb..8b939663ffd 100644 --- a/lib/ci/api/builds.rb +++ b/lib/ci/api/builds.rb @@ -18,24 +18,31 @@ module Ci if current_runner.is_runner_queue_value_latest?(params[:last_update]) header 'X-GitLab-Last-Update', params[:last_update] + Gitlab::Metrics.add_event(:build_not_found_cached) return build_not_found! end new_update = current_runner.ensure_runner_queue_value - build = Ci::RegisterBuildService.new(current_runner).execute + result = Ci::RegisterBuildService.new(current_runner).execute - if build - Gitlab::Metrics.add_event(:build_found, - project: build.project.path_with_namespace) + if result.valid? + if result.build + Gitlab::Metrics.add_event(:build_found, + project: result.build.project.path_with_namespace) - present build, with: Entities::BuildDetails - else - Gitlab::Metrics.add_event(:build_not_found) + present result.build, with: Entities::BuildDetails + else + Gitlab::Metrics.add_event(:build_not_found) - header 'X-GitLab-Last-Update', new_update + header 'X-GitLab-Last-Update', new_update - build_not_found! + build_not_found! + end + else + # We received build that is invalid due to concurrency conflict + Gitlab::Metrics.add_event(:build_invalid) + conflict! end end |