debian-mirror-gitlab/app/models/ci/resource.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

27 lines
1.2 KiB
Ruby
Raw Normal View History

2020-03-13 15:44:24 +05:30
# frozen_string_literal: true
module Ci
2021-10-27 15:23:28 +05:30
class Resource < Ci::ApplicationRecord
2020-03-13 15:44:24 +05:30
belongs_to :resource_group, class_name: 'Ci::ResourceGroup', inverse_of: :resources
2021-03-11 19:13:27 +05:30
belongs_to :processable, class_name: 'Ci::Processable', foreign_key: 'build_id', inverse_of: :resource
2020-03-13 15:44:24 +05:30
2021-03-11 19:13:27 +05:30
scope :free, -> { where(processable: nil) }
2021-10-27 15:23:28 +05:30
scope :retained, -> { where.not(processable: nil) }
2021-03-11 19:13:27 +05:30
scope :retained_by, -> (processable) { where(processable: processable) }
2021-10-27 15:23:28 +05:30
class << self
# In some cases, state machine hooks in `Ci::Build` are skipped
# even if the job status transitions to a complete state.
# For example, `Ci::Build#doom!` (a.k.a `data_integrity_failure`) doesn't execute state machine hooks.
# To handle these edge cases, we check the staleness of the jobs that currently
# assigned to the resources, and release if it's stale.
# See https://gitlab.com/gitlab-org/gitlab/-/issues/335537#note_632925914 for more information.
def stale_processables
Ci::Processable.where(id: retained.select(:build_id))
.complete
.updated_at_before(5.minutes.ago)
end
end
2020-03-13 15:44:24 +05:30
end
end