Class: Gitlab::BackgroundMigration::MoveCiBuildsMetadata::JobsDefinitionsAssigner

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/background_migration/move_ci_builds_metadata.rb

Overview

This is the main migration point for the definitions. For each jobs it builds a new definition object in memory and passes them to the BulkJobDefinitionsCreator to transform them in persisted objects. We use global_identifier to correlate between the in memory objects and the database objects because each definition is unique by ‘project_id, partition_id, checksum` attributes, not only by checksum. After the definitions are persisted we also bulk inset the glue records in their separate table.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(migration, jobs) ⇒ JobsDefinitionsAssigner

Returns a new instance of JobsDefinitionsAssigner.



311
312
313
314
# File 'lib/gitlab/background_migration/move_ci_builds_metadata.rb', line 311

def initialize(migration, jobs)
  @migration = migration
  @jobs = jobs
end

Instance Attribute Details

#jobsObject (readonly)

Returns the value of attribute jobs.



307
308
309
# File 'lib/gitlab/background_migration/move_ci_builds_metadata.rb', line 307

def jobs
  @jobs
end

Instance Method Details

#executeObject



316
317
318
319
320
321
322
323
324
325
326
327
# File 'lib/gitlab/background_migration/move_ci_builds_metadata.rb', line 316

def execute
  definitions = jobs.map { |job| job.job_definition = definition_model.initialize_from(job) }
  persisted_definitions = bulk_persist_definitions(definitions)

  definition_instances_attrs = jobs.map do |job|
    job_definition = persisted_definitions.fetch(job.job_definition.global_identifier)

    job_definition_instance_attrs_for(job, job_definition)
  end

  definition_instance_model.insert_all(definition_instances_attrs, unique_by: [:job_id, :partition_id])
end