summaryrefslogtreecommitdiff
path: root/app/services/ci/register_job_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/ci/register_job_service.rb')
-rw-r--r--app/services/ci/register_job_service.rb28
1 files changed, 14 insertions, 14 deletions
diff --git a/app/services/ci/register_job_service.rb b/app/services/ci/register_job_service.rb
index 3797ea1d96c..04d620d1d38 100644
--- a/app/services/ci/register_job_service.rb
+++ b/app/services/ci/register_job_service.rb
@@ -107,23 +107,15 @@ module Ci
build.runner_id = runner.id
build.runner_session_attributes = params[:session] if params[:session].present?
- unless build.has_valid_build_dependencies?
- build.drop!(:missing_dependency_failure)
- return false
- end
-
- unless build.supported_runner?(params.dig(:info, :features))
- build.drop!(:runner_unsupported)
- return false
- end
+ failure_reason, _ = pre_assign_runner_checks.find { |_, check| check.call(build, params) }
- if build.archived?
- build.drop!(:archived_failure)
- return false
+ if failure_reason
+ build.drop!(failure_reason)
+ else
+ build.run!
end
- build.run!
- true
+ !failure_reason
end
def scheduler_failure!(build)
@@ -238,6 +230,14 @@ module Ci
def job_queue_duration_seconds
@job_queue_duration_seconds ||= Gitlab::Metrics.histogram(:job_queue_duration_seconds, 'Request handling execution time', {}, JOB_QUEUE_DURATION_SECONDS_BUCKETS)
end
+
+ def pre_assign_runner_checks
+ {
+ missing_dependency_failure: -> (build, _) { !build.has_valid_build_dependencies? },
+ runner_unsupported: -> (build, params) { !build.supported_runner?(params.dig(:info, :features)) },
+ archived_failure: -> (build, _) { build.archived? }
+ }
+ end
end
end