Class: Ci::Pipelines::CreatePersistentRefService

Inherits:
Object
  • Object
show all
Defined in:
app/services/ci/pipelines/create_persistent_ref_service.rb

Direct Known Subclasses

ClearPersistentRefService

Constant Summary collapse

TIMEOUT =
1.hour
CACHE_KEY =
'pipeline:%{id}:create_persistent_ref_service'

Instance Method Summary collapse

Constructor Details

#initialize(pipeline) ⇒ CreatePersistentRefService

Returns a new instance of CreatePersistentRefService.



9
10
11
# File 'app/services/ci/pipelines/create_persistent_ref_service.rb', line 9

def initialize(pipeline)
  @pipeline = pipeline
end

Instance Method Details

#executeObject



13
14
15
16
17
18
19
20
21
22
23
# File 'app/services/ci/pipelines/create_persistent_ref_service.rb', line 13

def execute
  # NOTE: caching here is to prevent overwhelming calls to Gitaly API
  # triggered by the job transition to `running` in the same pipeline
  Rails.cache.fetch(pipeline_persistent_ref_cache_key, expires_in: TIMEOUT) do
    next true if persistent_ref.exist?
    next true if persistent_ref.create

    pipeline.drop!(:pipeline_ref_creation_failure)
    false
  end
end