From 3a6238c2e23454c462ccd229b1802583e657bfd0 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 12 Apr 2022 10:17:34 +0000 Subject: Add latest changes from gitlab-org/gitlab@14-9-stable-ee --- app/services/ci/register_job_service.rb | 12 ++++++++++++ app/services/ci/update_build_queue_service.rb | 17 +++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) (limited to 'app') diff --git a/app/services/ci/register_job_service.rb b/app/services/ci/register_job_service.rb index 59c4c17a964..c8b475f6c48 100644 --- a/app/services/ci/register_job_service.rb +++ b/app/services/ci/register_job_service.rb @@ -156,6 +156,18 @@ module Ci def process_build(build, params) unless build.pending? @metrics.increment_queue_operation(:build_not_pending) + + if Feature.enabled?(:ci_pending_builds_table_resiliency, default_enabled: :yaml) + ## + # If this build can not be picked because we had stale data in + # `ci_pending_builds` table, we need to respond with 409 to retry + # this operation. + # + if ::Ci::UpdateBuildQueueService.new.remove!(build) + return Result.new(nil, nil, false) + end + end + return end diff --git a/app/services/ci/update_build_queue_service.rb b/app/services/ci/update_build_queue_service.rb index 5a011a8cac6..a525ea179e0 100644 --- a/app/services/ci/update_build_queue_service.rb +++ b/app/services/ci/update_build_queue_service.rb @@ -37,14 +37,19 @@ module Ci raise InvalidQueueTransition unless transition.from == 'pending' - transition.within_transaction do - removed = build.all_queuing_entries.delete_all + transition.within_transaction { remove!(build) } + end - if removed > 0 - metrics.increment_queue_operation(:build_queue_pop) + ## + # Force recemove build from the queue, without checking a transition state + # + def remove!(build) + removed = build.all_queuing_entries.delete_all - build.id - end + if removed > 0 + metrics.increment_queue_operation(:build_queue_pop) + + build.id end end -- cgit v1.2.1