34 lines
983 B
Ruby
34 lines
983 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Gitlab
|
||
|
module Artifacts
|
||
|
class MigrationHelper
|
||
|
def migrate_to_remote_storage(&block)
|
||
|
artifacts = ::Ci::JobArtifact.with_files_stored_locally
|
||
|
migrate(artifacts, ObjectStorage::Store::REMOTE, &block)
|
||
|
end
|
||
|
|
||
|
def migrate_to_local_storage(&block)
|
||
|
artifacts = ::Ci::JobArtifact.with_files_stored_remotely
|
||
|
migrate(artifacts, ObjectStorage::Store::LOCAL, &block)
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def batch_size
|
||
|
ENV.fetch('MIGRATION_BATCH_SIZE', 10).to_i
|
||
|
end
|
||
|
|
||
|
def migrate(artifacts, store, &block)
|
||
|
artifacts.find_each(batch_size: batch_size) do |artifact| # rubocop:disable CodeReuse/ActiveRecord
|
||
|
artifact.file.migrate!(store)
|
||
|
|
||
|
yield artifact if block
|
||
|
rescue => e
|
||
|
raise StandardError.new("Failed to transfer artifact of type #{artifact.file_type} and ID #{artifact.id} with error: #{e.message}")
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|