debian-mirror-gitlab/lib/gitlab/ci/pipeline/chain/limit/active_jobs.rb
2023-01-12 18:35:48 +00:00

66 lines
1.8 KiB
Ruby

# frozen_string_literal: true
module Gitlab
module Ci
module Pipeline
module Chain
module Limit
class ActiveJobs < Chain::Base
include ::Gitlab::Utils::StrongMemoize
include ::Gitlab::Ci::Pipeline::Chain::Helpers
LIMIT_NAME = :ci_active_jobs
MESSAGE = "Project exceeded the allowed number of jobs in active pipelines. Retry later."
def perform!
return unless limits.exceeded?(LIMIT_NAME, count_jobs_in_alive_pipelines)
error(MESSAGE, drop_reason: :job_activity_limit_exceeded)
Gitlab::AppLogger.info(
class: self.class.name,
message: MESSAGE,
project_id: project.id,
plan: project.actual_plan_name,
project_path: project.path,
jobs_in_alive_pipelines_count: count_jobs_in_alive_pipelines
)
end
def break?
pipeline.errors.any?
end
private
def namespace
strong_memoize(:namespace) do
project.namespace
end
end
def limits
strong_memoize(:limits) do
namespace.actual_limits
end
end
def count_jobs_in_alive_pipelines
strong_memoize(:count_jobs_in_alive_pipelines) do
count_persisted_jobs_in_all_alive_pipelines + count_current_pipeline_jobs
end
end
def count_current_pipeline_jobs
command.pipeline_seed.size
end
def count_persisted_jobs_in_all_alive_pipelines
project.all_pipelines.jobs_count_in_alive_pipelines
end
end
end
end
end
end
end