1# frozen_string_literal: true 2 3module Ci 4 module ResourceGroups 5 class AssignResourceFromResourceGroupService < ::BaseService 6 # rubocop: disable CodeReuse/ActiveRecord 7 def execute(resource_group) 8 release_resource_from_stale_jobs(resource_group) 9 10 free_resources = resource_group.resources.free.count 11 12 resource_group.upcoming_processables.take(free_resources).each do |processable| 13 processable.enqueue_waiting_for_resource 14 end 15 end 16 # rubocop: enable CodeReuse/ActiveRecord 17 18 private 19 20 def release_resource_from_stale_jobs(resource_group) 21 resource_group.resources.stale_processables.find_each do |processable| 22 resource_group.release_resource_from(processable) 23 end 24 end 25 end 26 end 27end 28