Skip to content
Snippets Groups Projects
Verified Commit 7b03368b authored by David Fernandez's avatar David Fernandez :palm_tree: Committed by GitLab
Browse files

Merge branch '409873-cleanup-container-registry-model' into 'master'

Remove migration-related code in Container Repository

See merge request !148009



Merged-by: David Fernandez's avatarDavid Fernandez <dfernandez@gitlab.com>
Approved-by: default avatarRadamanthus Batnag <rbatnag@gitlab.com>
Approved-by: default avatarPrabakaran Murugesan <pmurugesan@gitlab.com>
Approved-by: David Fernandez's avatarDavid Fernandez <dfernandez@gitlab.com>
Approved-by: default avatarSmriti Garg <sgarg@gitlab.com>
Reviewed-by: David Fernandez's avatarDavid Fernandez <dfernandez@gitlab.com>
Reviewed-by: default avatarSincheol (David) Kim <dkim@gitlab.com>
Reviewed-by: default avatarPrabakaran Murugesan <pmurugesan@gitlab.com>
Reviewed-by: default avatarRadamanthus Batnag <rbatnag@gitlab.com>
Co-authored-by: default avatarAdie Po <avpfestin@gitlab.com>
parents eb467e49 6b623b64
No related branches found
No related tags found
2 merge requests!158455Backport Release Environments notification pipeline change to 16.11,!148009Remove migration-related code in Container Repository
Pipeline #1265859484 failed
Showing
with 2 additions and 412 deletions
......@@ -100,7 +100,6 @@ Gitlab/AvoidGitlabInstanceChecks:
- 'ee/lib/api/internal/upcoming_reconciliations.rb'
- 'ee/lib/api/scim/instance_scim.rb'
- 'ee/lib/ee/api/namespaces.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_storage_size_with_recent_size.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_storage_size_without_pipeline_artifacts_size_job.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_storage_size_without_uploads_size.rb'
......
......@@ -389,7 +389,6 @@ Gitlab/StrongMemoizeAttr:
- 'ee/lib/ee/gitlab/analytics/cycle_analytics/data_collector.rb'
- 'ee/lib/ee/gitlab/analytics/cycle_analytics/stage_events.rb'
- 'ee/lib/ee/gitlab/auth/o_auth/auth_hash.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
- 'ee/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules.rb'
- 'ee/lib/ee/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
- 'ee/lib/ee/gitlab/checks/base_checker.rb'
......
......@@ -1195,7 +1195,6 @@ Layout/ArgumentAlignment:
- 'spec/lib/backup/manager_spec.rb'
- 'spec/lib/bulk_imports/common/pipelines/lfs_objects_pipeline_spec.rb'
- 'spec/lib/container_registry/blob_spec.rb'
- 'spec/lib/container_registry/migration_spec.rb'
- 'spec/lib/container_registry/tag_spec.rb'
- 'spec/lib/error_tracking/sentry_client/issue_spec.rb'
- 'spec/lib/feature/definition_spec.rb'
......
......@@ -4524,7 +4524,6 @@ Layout/LineLength:
- 'spec/support/matchers/query_matcher.rb'
- 'spec/support/matchers/route_to_route_not_found_matcher.rb'
- 'spec/support/shared_contexts/bulk_imports_requests_shared_context.rb'
- 'spec/support/shared_contexts/container_repositories_shared_context.rb'
- 'spec/support/shared_contexts/finders/group_projects_finder_shared_contexts.rb'
- 'spec/support/shared_contexts/fixtures/analytics_shared_context.rb'
- 'spec/support/shared_contexts/graphql/resolvers/runners_resolver_shared_context.rb'
......
......@@ -115,7 +115,6 @@ Lint/MissingCopEnableDirective:
- 'ee/app/workers/ci/runners/stale_group_runners_prune_cron_worker.rb'
- 'ee/app/workers/groups/export_memberships_worker.rb'
- 'ee/lib/api/ldap_group_links.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
- 'ee/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules.rb'
- 'ee/lib/gitlab/spdx/license.rb'
- 'ee/spec/helpers/groups/security_features_helper_spec.rb'
......
......@@ -157,7 +157,6 @@ Lint/RedundantCopDisableDirective:
- 'lib/gitlab/analytics/cycle_analytics/records_fetcher.rb'
- 'lib/gitlab/application_context.rb'
- 'lib/gitlab/background_migration/backfill_issue_search_data.rb'
- 'lib/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
- 'lib/gitlab/background_migration/backfill_project_statistics_storage_size_without_uploads_size.rb'
- 'lib/gitlab/background_migration/batching_strategies/loose_index_scan_batching_strategy.rb'
- 'lib/gitlab/background_migration/fix_incoherent_packages_size_on_project_statistics.rb'
......
......@@ -1519,7 +1519,6 @@ RSpec/ContextWording:
- 'spec/lib/constraints/project_url_constrainer_spec.rb'
- 'spec/lib/constraints/user_url_constrainer_spec.rb'
- 'spec/lib/container_registry/gitlab_api_client_spec.rb'
- 'spec/lib/container_registry/migration_spec.rb'
- 'spec/lib/container_registry/registry_spec.rb'
- 'spec/lib/container_registry/tag_spec.rb'
- 'spec/lib/error_tracking/sentry_client/projects_spec.rb'
......@@ -2723,7 +2722,6 @@ RSpec/ContextWording:
- 'spec/services/work_items/parent_links/create_service_spec.rb'
- 'spec/support/shared_contexts/bulk_imports_requests_shared_context.rb'
- 'spec/support/shared_contexts/changes_access_checks_shared_context.rb'
- 'spec/support/shared_contexts/container_repositories_shared_context.rb'
- 'spec/support/shared_contexts/controllers/githubish_import_controller_shared_context.rb'
- 'spec/support/shared_contexts/controllers/ldap_omniauth_callbacks_controller_shared_context.rb'
- 'spec/support/shared_contexts/controllers/logging_shared_context.rb'
......
......@@ -2598,7 +2598,6 @@ RSpec/FeatureCategory:
- 'spec/lib/container_registry/blob_spec.rb'
- 'spec/lib/container_registry/client_spec.rb'
- 'spec/lib/container_registry/gitlab_api_client_spec.rb'
- 'spec/lib/container_registry/migration_spec.rb'
- 'spec/lib/container_registry/path_spec.rb'
- 'spec/lib/container_registry/registry_spec.rb'
- 'spec/lib/container_registry/tag_spec.rb'
......@@ -2746,7 +2745,6 @@ RSpec/FeatureCategory:
- 'spec/lib/gitlab/background_migration/populate_projects_star_count_spec.rb'
- 'spec/lib/gitlab/background_migration/remove_self_managed_wiki_notes_spec.rb'
- 'spec/lib/gitlab/background_migration/rename_task_system_note_to_checklist_item_spec.rb'
- 'spec/lib/gitlab/background_migration/reset_too_many_tags_skipped_registry_imports_spec.rb'
- 'spec/lib/gitlab/background_migration/set_correct_vulnerability_state_spec.rb'
- 'spec/lib/gitlab/background_migration/set_legacy_open_source_license_available_for_non_public_projects_spec.rb'
- 'spec/lib/gitlab/background_migration/update_ci_pipeline_artifacts_unknown_locked_status_spec.rb'
......
......@@ -1733,7 +1733,6 @@ RSpec/NamedSubject:
- 'spec/lib/constraints/user_url_constrainer_spec.rb'
- 'spec/lib/container_registry/client_spec.rb'
- 'spec/lib/container_registry/gitlab_api_client_spec.rb'
- 'spec/lib/container_registry/migration_spec.rb'
- 'spec/lib/container_registry/path_spec.rb'
- 'spec/lib/container_registry/registry_spec.rb'
- 'spec/lib/container_registry/tag_spec.rb'
......
......@@ -122,7 +122,6 @@ RSpec/ScatteredLet:
- 'spec/lib/gitlab/auth/saml/auth_hash_spec.rb'
- 'spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_inactive_public_projects_spec.rb'
- 'spec/lib/gitlab/background_migration/legacy_uploads_migrator_spec.rb'
- 'spec/lib/gitlab/background_migration/reset_too_many_tags_skipped_registry_imports_spec.rb'
- 'spec/lib/gitlab/background_migration/update_jira_tracker_data_deployment_type_based_on_url_spec.rb'
- 'spec/lib/gitlab/checks/matching_merge_request_spec.rb'
- 'spec/lib/gitlab/ci/config/external/file/artifact_spec.rb'
......
......@@ -1758,7 +1758,6 @@ Style/InlineDisableAnnotation:
- 'ee/lib/ee/gitlab/background_migration/backfill_dismissal_reason_in_vulnerability_reads.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_epic_cache_counts.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_missing_vulnerability_dismissal_details.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_storage_size_without_uploads_size.rb'
- 'ee/lib/ee/gitlab/background_migration/create_compliance_standards_adherence.rb'
- 'ee/lib/ee/gitlab/background_migration/create_vulnerability_links.rb'
......@@ -2206,7 +2205,6 @@ Style/InlineDisableAnnotation:
- 'lib/gitlab/background_migration/backfill_project_member_namespace_id.rb'
- 'lib/gitlab/background_migration/backfill_project_namespace_on_issues.rb'
- 'lib/gitlab/background_migration/backfill_project_repositories.rb'
- 'lib/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
- 'lib/gitlab/background_migration/backfill_project_statistics_storage_size_with_recent_size.rb'
- 'lib/gitlab/background_migration/backfill_project_statistics_storage_size_without_pipeline_artifacts_size_job.rb'
- 'lib/gitlab/background_migration/backfill_project_statistics_storage_size_without_uploads_size.rb'
......@@ -2255,7 +2253,6 @@ Style/InlineDisableAnnotation:
- 'lib/gitlab/background_migration/redis/backfill_project_pipeline_status_ttl.rb'
- 'lib/gitlab/background_migration/remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings.rb'
- 'lib/gitlab/background_migration/reset_status_on_container_repositories.rb'
- 'lib/gitlab/background_migration/reset_too_many_tags_skipped_registry_imports.rb'
- 'lib/gitlab/background_migration/second_recount_epic_cache_counts.rb'
- 'lib/gitlab/background_migration/third_recount_epic_cache_counts.rb'
- 'lib/gitlab/background_migration/truncate_overlong_vulnerability_html_titles.rb'
......
......@@ -6,7 +6,6 @@ Style/NumericLiteralPrefix:
- 'app/services/packages/debian/generate_distribution_key_service.rb'
- 'config/initializers/01_secret_token.rb'
- 'config/initializers/1_settings.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
- 'ee/lib/gitlab/geo/replication/blob_downloader.rb'
- 'ee/spec/lib/bulk_imports/groups/pipelines/iterations_pipeline_spec.rb'
- 'ee/spec/models/analytics/devops_adoption/snapshot_spec.rb'
......
......@@ -214,7 +214,6 @@ Style/RedundantSelf:
- 'ee/lib/ee/gitlab/auth/ldap/sync/groups.rb'
- 'ee/lib/ee/gitlab/auth/ldap/sync/proxy.rb'
- 'ee/lib/ee/gitlab/auth/ldap/sync/users.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
- 'ee/lib/ee/gitlab/background_migration/delete_invalid_epic_issues.rb'
- 'ee/lib/ee/gitlab/database.rb'
- 'ee/lib/ee/legacy_model.rb'
......
......@@ -46,7 +46,6 @@ Style/StringConcatenation:
- 'ee/app/workers/scan_security_report_secrets_worker.rb'
- 'ee/lib/api/project_mirror.rb'
- 'ee/lib/ee/gitlab/auth/ldap/person.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
- 'ee/lib/ee/gitlab/background_migration/populate_latest_pipeline_ids.rb'
- 'ee/lib/ee/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
- 'ee/lib/gitlab/elastic/search_results.rb'
......
......@@ -81,7 +81,6 @@ Style/SymbolProc:
- 'ee/lib/ee/api/entities/geo_node.rb'
- 'ee/lib/ee/api/entities/merge_request_approval_state.rb'
- 'ee/lib/ee/gitlab/auth/ldap/access.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
- 'ee/lib/gitlab/ci/parsers/security/formatters/dependency_list.rb'
- 'ee/lib/gitlab/contribution_analytics/data_collector.rb'
- 'ee/lib/gitlab/custom_file_templates.rb'
......
......@@ -11,13 +11,11 @@ class ContainerRepository < ApplicationRecord
WAITING_CLEANUP_STATUSES = %i[cleanup_scheduled cleanup_unfinished].freeze
REQUIRING_CLEANUP_STATUSES = %i[cleanup_unscheduled cleanup_scheduled].freeze
# These constants can be removed once we remove the columns migration_state and migration_aborted_in_state
IDLE_MIGRATION_STATES = %w[default pre_import_done import_done import_aborted import_skipped].freeze
ACTIVE_MIGRATION_STATES = %w[pre_importing importing].freeze
MIGRATION_STATES = (IDLE_MIGRATION_STATES + ACTIVE_MIGRATION_STATES).freeze
ABORTABLE_MIGRATION_STATES = (ACTIVE_MIGRATION_STATES + %w[pre_import_done default]).freeze
SKIPPABLE_MIGRATION_STATES = (ABORTABLE_MIGRATION_STATES + %w[import_aborted]).freeze
MIGRATION_PHASE_1_ENDED_AT = Date.new(2022, 01, 23).freeze
MAX_TAGS_PAGES = 2000
......@@ -71,160 +69,11 @@ class ContainerRepository < ApplicationRecord
scope :search_by_name, ->(query) { fuzzy_search(query, [:name], use_minimum_char_limit: false) }
scope :waiting_for_cleanup, -> { where(expiration_policy_cleanup_status: WAITING_CLEANUP_STATUSES) }
scope :expiration_policy_started_at_nil_or_before, ->(timestamp) { where('expiration_policy_started_at < ? OR expiration_policy_started_at IS NULL', timestamp) }
scope :with_migration_import_started_at_nil_or_before, ->(timestamp) { where("COALESCE(migration_import_started_at, '01-01-1970') < ?", timestamp) }
scope :with_migration_pre_import_started_at_nil_or_before, ->(timestamp) { where("COALESCE(migration_pre_import_started_at, '01-01-1970') < ?", timestamp) }
scope :with_migration_pre_import_done_at_nil_or_before, ->(timestamp) { where("COALESCE(migration_pre_import_done_at, '01-01-1970') < ?", timestamp) }
scope :with_stale_ongoing_cleanup, ->(threshold) { cleanup_ongoing.expiration_policy_started_at_nil_or_before(threshold) }
scope :with_stale_delete_at, ->(threshold) { where('delete_started_at < ?', threshold) }
scope :import_in_process, -> { where(migration_state: %w[pre_importing pre_import_done importing]) }
scope :recently_done_migration_step, -> do
where(migration_state: %w[import_done pre_import_done import_aborted import_skipped])
.order(Arel.sql('GREATEST(migration_pre_import_done_at, migration_import_done_at, migration_aborted_at, migration_skipped_at) DESC'))
end
scope :ready_for_import, -> do
# There is no yaml file for the container_registry_phase_2_deny_list
# feature flag since it is only accessed in this query.
# https://gitlab.com/gitlab-org/gitlab/-/issues/350543 tracks the rollout and
# removal of this feature flag.
joins(project: [:namespace]).where(
migration_state: [:default],
created_at: ...ContainerRegistry::Migration.created_before
).with_target_import_tier
.where(
"NOT EXISTS (
SELECT 1
FROM feature_gates
WHERE feature_gates.feature_key = 'container_registry_phase_2_deny_list'
AND feature_gates.key = 'actors'
AND feature_gates.value = concat('Group:', namespaces.traversal_ids[1])
)"
)
end
before_update :set_status_updated_at_to_now, if: :status_changed?
state_machine :migration_state, initial: :default, use_transactions: false do
state :pre_importing do
validates :migration_pre_import_started_at, presence: true
validates :migration_pre_import_done_at, presence: false
end
state :pre_import_done do
validates :migration_pre_import_done_at, presence: true
end
state :importing do
validates :migration_import_started_at, presence: true
validates :migration_import_done_at, presence: false
end
state :import_done
state :import_skipped do
validates :migration_skipped_reason, :migration_skipped_at, presence: true
end
state :import_aborted do
validates :migration_aborted_at, presence: true
validates :migration_retries_count, presence: true, numericality: { greater_than_or_equal_to: 1 }
end
event :start_pre_import do
transition %i[default pre_importing importing import_aborted] => :pre_importing
end
event :finish_pre_import do
transition %i[pre_importing importing import_aborted] => :pre_import_done
end
event :start_import do
transition %i[pre_import_done pre_importing importing import_aborted] => :importing
end
event :finish_import do
transition %i[default pre_importing importing import_aborted] => :import_done
end
event :already_migrated do
transition default: :import_done
end
event :abort_import do
transition ABORTABLE_MIGRATION_STATES.map(&:to_sym) => :import_aborted
end
event :skip_import do
transition SKIPPABLE_MIGRATION_STATES.map(&:to_sym) => :import_skipped
end
event :retry_pre_import do
transition %i[pre_importing importing import_aborted] => :pre_importing
end
event :retry_import do
transition %i[pre_importing importing import_aborted] => :importing
end
before_transition any => :pre_importing do |container_repository|
container_repository.migration_pre_import_started_at = Time.zone.now
container_repository.migration_pre_import_done_at = nil
end
after_transition any => :pre_importing do |container_repository, transition|
forced = transition.args.first.try(:[], :forced)
next if forced
container_repository.try_import do
container_repository.migration_pre_import
end
end
before_transition any => :pre_import_done do |container_repository|
container_repository.migration_pre_import_done_at = Time.zone.now
end
before_transition any => :importing do |container_repository|
container_repository.migration_import_started_at = Time.zone.now
container_repository.migration_import_done_at = nil
end
after_transition any => :importing do |container_repository, transition|
forced = transition.args.first.try(:[], :forced)
next if forced
container_repository.try_import do
container_repository.migration_import
end
end
before_transition any => :import_done do |container_repository|
container_repository.migration_import_done_at = Time.zone.now
end
before_transition any => :import_aborted do |container_repository|
container_repository.migration_aborted_in_state = container_repository.migration_state
container_repository.migration_aborted_at = Time.zone.now
container_repository.migration_retries_count += 1
end
after_transition any => :import_aborted do |container_repository|
if container_repository.retried_too_many_times?
container_repository.skip_import(reason: :too_many_retries)
end
end
before_transition import_aborted: any do |container_repository|
container_repository.migration_aborted_at = nil
container_repository.migration_aborted_in_state = nil
end
before_transition any => :import_skipped do |container_repository|
container_repository.migration_skipped_at = Time.zone.now
end
end
# Container Repository model and the code that makes API calls
# are tied. Sometimes (mainly in Geo) we need to work with Registry
# when Container Repository record doesn't even exist.
......@@ -240,10 +89,7 @@ def self.exists_by_path?(path)
end
def self.all_migrated?
# check that the set of non migrated repositories is empty
where(created_at: ...MIGRATION_PHASE_1_ENDED_AT)
.where.not(migration_state: 'import_done')
.empty?
Gitlab.com_except_jh?
end
def self.with_enabled_policy
......@@ -262,30 +108,6 @@ def self.with_unfinished_cleanup
with_enabled_policy.cleanup_unfinished
end
def self.with_stale_migration(before_timestamp)
stale_pre_importing = with_migration_states(:pre_importing)
.with_migration_pre_import_started_at_nil_or_before(before_timestamp)
stale_pre_import_done = with_migration_states(:pre_import_done)
.with_migration_pre_import_done_at_nil_or_before(before_timestamp)
stale_importing = with_migration_states(:importing)
.with_migration_import_started_at_nil_or_before(before_timestamp)
union = ::Gitlab::SQL::Union.new([
stale_pre_importing,
stale_pre_import_done,
stale_importing
])
from("(#{union.to_sql}) #{ContainerRepository.table_name}")
end
def self.with_target_import_tier
# overridden in ee
#
# Repositories are being migrated by tier on Saas, so we need to
# filter by plan/subscription which is not available in FOSS
all
end
def self.registry_client_expiration_time
(Gitlab::CurrentSettings.container_registry_token_expire_delay * 60) - AUTH_TOKEN_USAGE_RESERVED_TIME_IN_SECS
end
......@@ -294,121 +116,10 @@ class << self
alias_method :pending_destruction, :delete_scheduled # needed by Packages::Destructible
end
def skip_import(reason:)
self.migration_skipped_reason = reason
super
end
def start_pre_import(*args)
return false unless ContainerRegistry::Migration.enabled?
super(*args)
end
def retry_pre_import
return false unless ContainerRegistry::Migration.enabled?
super
end
def retry_import
return false unless ContainerRegistry::Migration.enabled?
super
end
def finish_pre_import_and_start_import
# nothing to do between those two transitions for now.
finish_pre_import && start_import
end
def retry_aborted_migration
return unless migration_state == 'import_aborted'
reconcile_import_status(external_import_status) do
# If the import_status request fails, use the timestamp to guess current state
migration_pre_import_done_at ? retry_import : retry_pre_import
end
end
def reconcile_import_status(status)
case status
when 'native'
finish_import_as(:native_import)
when 'pre_import_in_progress'
return if pre_importing?
start_pre_import(forced: true)
when 'import_in_progress'
return if importing?
start_import(forced: true)
when 'import_complete'
finish_import
when 'import_failed', 'import_canceled'
retry_import
when 'pre_import_complete'
finish_pre_import_and_start_import
when 'pre_import_failed', 'pre_import_canceled'
retry_pre_import
else
yield
end
end
def try_import
raise ArgumentError, 'block not given' unless block_given?
try_count = 0
begin
try_count += 1
case yield
when :ok
return true
when :not_found
finish_import_as(:not_found)
when :already_imported
finish_import_as(:native_import)
else
abort_import
end
false
rescue TooManyImportsError
if try_count <= ::ContainerRegistry::Migration.start_max_retries
sleep 0.1 * try_count
retry
else
abort_import
false
end
end
end
def retried_too_many_times?
migration_retries_count >= ContainerRegistry::Migration.max_retries
end
def nearing_or_exceeded_retry_limit?
migration_retries_count >= ContainerRegistry::Migration.max_retries - 1
end
def migrated?
Gitlab.com_except_jh?
end
def last_import_step_done_at
[migration_pre_import_done_at, migration_import_done_at, migration_aborted_at, migration_skipped_at].compact.max
end
def external_import_status
strong_memoize(:import_status) do
gitlab_api_client.import_status(self.path)
end
end
# rubocop: disable CodeReuse/ServiceClass
def registry
strong_memoize_with_expiration(:registry, self.class.registry_client_expiration_time) do
......@@ -581,55 +292,6 @@ def set_delete_scheduled_status
)
end
def migration_in_active_state?
migration_state.in?(ACTIVE_MIGRATION_STATES)
end
def migration_importing?
migration_state == 'importing'
end
def migration_pre_importing?
migration_state == 'pre_importing'
end
def migration_pre_import
return :error unless gitlab_api_client.supports_gitlab_api?
response = gitlab_api_client.pre_import_repository(self.path)
raise TooManyImportsError if response == :too_many_imports
response
end
def migration_import
return :error unless gitlab_api_client.supports_gitlab_api?
response = gitlab_api_client.import_repository(self.path)
raise TooManyImportsError if response == :too_many_imports
response
end
def migration_cancel
return :error unless gitlab_api_client.supports_gitlab_api?
gitlab_api_client.cancel_repository_import(self.path)
end
# This method is not meant for consumption by the code
# It is meant for manual use in the case that a migration needs to be
# cancelled by an admin or SRE
def force_migration_cancel
return :error unless gitlab_api_client.supports_gitlab_api?
response = gitlab_api_client.cancel_repository_import(self.path, force: true)
skip_import(reason: :migration_forced_canceled) if response[:status] == :ok
response
end
def self.build_from_path(path)
self.new(project: path.repository_project, name: path.repository_name)
end
......@@ -661,11 +323,6 @@ def can_access_the_gitlab_api?
migrated? && ContainerRegistry::GitlabApiClient.supports_gitlab_api?
end
def finish_import_as(reason)
self.migration_skipped_reason = reason
finish_import
end
def transform_tags_page(tags_response_body)
return [] unless tags_response_body
......
......@@ -14,10 +14,6 @@ class ContainerRegistryAuthenticationService < BaseService
:build_destroy_container_image
].freeze
FORBIDDEN_IMPORTING_SCOPES = %w[push delete *].freeze
ActiveImportError = Class.new(StandardError)
def execute(authentication_abilities:)
@authentication_abilities = authentication_abilities
......@@ -34,12 +30,6 @@ def execute(authentication_abilities:)
end
{ token: authorized_token(*scopes).encoded }
rescue ActiveImportError
error(
'DENIED',
status: 403,
message: 'Your repository is currently being migrated to a new platform and writes are temporarily disabled. Go to https://gitlab.com/groups/gitlab-org/-/epics/5523 to learn more.'
)
end
def self.full_access_token(*names)
......@@ -194,8 +184,6 @@ def process_registry_access(type, name, actions)
def process_repository_access(type, path, actions)
return unless path.valid?
raise ActiveImportError if actively_importing?(actions, path)
requested_project = path.repository_project
return unless requested_project
......@@ -220,15 +208,6 @@ def process_repository_access(type, path, actions)
}
end
def actively_importing?(actions, path)
return false if FORBIDDEN_IMPORTING_SCOPES.intersection(actions).empty?
container_repository = ContainerRepository.find_by_path(path)
return false unless container_repository
container_repository.migration_importing?
end
##
# Because we do not have two way communication with registry yet,
# we create a container repository image resource when push to the
......
......@@ -14,7 +14,6 @@ def execute(container_repository)
@tag_names = params[:tags]
return error('not tags specified') if @tag_names.blank?
return error('repository importing') if cancel_while_importing?
delete_tags
end
......@@ -51,16 +50,6 @@ def log_response(response)
end
end
def cancel_while_importing?
return true if @container_repository.importing?
if container_expiration_policy?
return @container_repository.pre_importing? || @container_repository.pre_import_done?
end
false
end
def container_expiration_policy?
params[:container_expiration_policy].present?
end
......
---
name: container_registry_migration_limit_gitlab_org
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/78613
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/350543
milestone: '14.8'
type: development
group: group::container registry
default_enabled: false
---
name: container_registry_migration_phase2_all_plans
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/83135
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/350543
milestone: '14.10'
type: development
group: group::container registry
default_enabled: false
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment