Class: Gitlab::BackgroundMigration::BackfillProjectFeaturePackageRegistryAccessLevel

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

Overview

Backfill projectfeatures.package_registry_access_level depending on projects.packages_enabled

Defined Under Namespace

Classes: ProjectFeature

Constant Summary collapse

FEATURE_DISABLED =

ProjectFeature::DISABLED

0
FEATURE_PRIVATE =

ProjectFeature::PRIVATE

10
FEATURE_ENABLED =

ProjectFeature::ENABLED

20
FEATURE_PUBLIC =

ProjectFeature::PUBLIC

30
PROJECT_PRIVATE =

Gitlab::VisibilityLevel::PRIVATE

0
PROJECT_INTERNAL =

Gitlab::VisibilityLevel::INTERNAL

10
PROJECT_PUBLIC =

Gitlab::VisibilityLevel::PUBLIC

20

Constants inherited from BatchedMigrationJob

Gitlab::BackgroundMigration::BatchedMigrationJob::DEFAULT_FEATURE_CATEGORY

Constants included from Database::DynamicModelHelpers

Database::DynamicModelHelpers::BATCH_SIZE

Instance Method Summary collapse

Methods inherited from BatchedMigrationJob

#batch_metrics, feature_category, #filter_batch, generic_instance, #initialize, job_arguments, job_arguments_count, operation_name, scope_to

Methods included from Database::DynamicModelHelpers

#define_batchable_model, #each_batch, #each_batch_range

Constructor Details

This class inherits a constructor from Gitlab::BackgroundMigration::BatchedMigrationJob

Instance Method Details

#performObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/gitlab/background_migration/backfill_project_feature_package_registry_access_level.rb', line 23

def perform
  each_sub_batch do |sub_batch|
    ProjectFeature.connection.execute(
      <<~SQL
      UPDATE project_features pf
      SET package_registry_access_level = (CASE p.packages_enabled
                                            WHEN true THEN (CASE p.visibility_level
                                                            WHEN #{PROJECT_PUBLIC} THEN #{FEATURE_PUBLIC}
                                                            WHEN #{PROJECT_INTERNAL} THEN #{FEATURE_ENABLED}
                                                            WHEN #{PROJECT_PRIVATE} THEN #{FEATURE_PRIVATE}
                                                            END)
                                            WHEN false THEN #{FEATURE_DISABLED}
                                            ELSE #{FEATURE_DISABLED}
                                            END)
      FROM projects p
      WHERE pf.project_id = p.id AND
      pf.project_id BETWEEN #{start_id} AND #{end_id}
      SQL
    )
  end
end