Class: Gitlab::Ci::JobDefinitions::FindOrCreate

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/ci/job_definitions/find_or_create.rb

Constant Summary collapse

BATCH_SIZE =
50

Instance Method Summary collapse

Constructor Details

#initialize(pipeline, definitions: []) ⇒ FindOrCreate

Returns a new instance of FindOrCreate.



9
10
11
12
13
# File 'lib/gitlab/ci/job_definitions/find_or_create.rb', line 9

def initialize(pipeline, definitions: [])
  @project_id = pipeline.project_id
  @partition_id = pipeline.partition_id
  @job_definitions = Array.wrap(definitions).uniq(&:checksum)
end

Instance Method Details

#executeObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/gitlab/ci/job_definitions/find_or_create.rb', line 15

def execute
  return [] if job_definitions.empty?

  existing_definitions = fetch_records_for(job_definitions)
  existing_definitions_by_checksum = existing_definitions.group_by(&:checksum)
  missing_definitions = @job_definitions.reject do |d|
    existing_definitions_by_checksum[d.checksum]
  end

  return existing_definitions if missing_definitions.empty?

  insert_missing(missing_definitions)

  existing_definitions + fetch_records_for(missing_definitions)
end