2017-09-06 05:16:26 +00:00
|
|
|
namespace :gitlab do
|
|
|
|
namespace :storage do
|
|
|
|
desc 'GitLab | Storage | Migrate existing projects to Hashed Storage'
|
|
|
|
task migrate_to_hashed: :environment do
|
2018-12-19 21:10:00 +00:00
|
|
|
if Gitlab::Database.read_only?
|
|
|
|
warn 'This task requires database write access. Exiting.'
|
|
|
|
|
|
|
|
next
|
|
|
|
end
|
|
|
|
|
2018-06-07 15:40:44 +00:00
|
|
|
storage_migrator = Gitlab::HashedStorage::Migrator.new
|
2018-05-21 16:40:57 +00:00
|
|
|
helper = Gitlab::HashedStorage::RakeHelper
|
2017-09-06 05:16:26 +00:00
|
|
|
|
2018-06-07 15:40:44 +00:00
|
|
|
if helper.range_single_item?
|
|
|
|
project = Project.with_unmigrated_storage.find_by(id: helper.range_from)
|
|
|
|
|
|
|
|
unless project
|
2018-12-19 21:10:00 +00:00
|
|
|
warn "There are no projects requiring storage migration with ID=#{helper.range_from}"
|
2018-06-07 15:40:44 +00:00
|
|
|
|
|
|
|
next
|
|
|
|
end
|
|
|
|
|
|
|
|
puts "Enqueueing storage migration of #{project.full_path} (ID=#{project.id})..."
|
|
|
|
storage_migrator.migrate(project)
|
|
|
|
|
|
|
|
next
|
|
|
|
end
|
|
|
|
|
|
|
|
legacy_projects_count = Project.with_unmigrated_storage.count
|
|
|
|
|
2017-09-06 05:16:26 +00:00
|
|
|
if legacy_projects_count == 0
|
2018-12-19 21:10:00 +00:00
|
|
|
warn 'There are no projects requiring storage migration. Nothing to do!'
|
2017-09-06 05:16:26 +00:00
|
|
|
|
|
|
|
next
|
|
|
|
end
|
|
|
|
|
2018-05-21 16:40:57 +00:00
|
|
|
print "Enqueuing migration of #{legacy_projects_count} projects in batches of #{helper.batch_size}"
|
2017-09-06 05:16:26 +00:00
|
|
|
|
2018-05-21 16:40:57 +00:00
|
|
|
helper.project_id_batches do |start, finish|
|
2019-01-17 01:53:50 +00:00
|
|
|
storage_migrator.bulk_schedule(start: start, finish: finish)
|
2017-09-06 05:16:26 +00:00
|
|
|
|
|
|
|
print '.'
|
|
|
|
end
|
|
|
|
|
|
|
|
puts ' Done!'
|
|
|
|
end
|
|
|
|
|
|
|
|
desc 'Gitlab | Storage | Summary of existing projects using Legacy Storage'
|
|
|
|
task legacy_projects: :environment do
|
2018-05-21 16:40:57 +00:00
|
|
|
helper = Gitlab::HashedStorage::RakeHelper
|
2018-05-29 00:53:21 +00:00
|
|
|
helper.relation_summary('projects using Legacy Storage', Project.without_storage_feature(:repository))
|
2017-09-06 05:16:26 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
desc 'Gitlab | Storage | List existing projects using Legacy Storage'
|
|
|
|
task list_legacy_projects: :environment do
|
2018-05-21 16:40:57 +00:00
|
|
|
helper = Gitlab::HashedStorage::RakeHelper
|
|
|
|
helper.projects_list('projects using Legacy Storage', Project.without_storage_feature(:repository))
|
2017-09-06 05:16:26 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
desc 'Gitlab | Storage | Summary of existing projects using Hashed Storage'
|
|
|
|
task hashed_projects: :environment do
|
2018-05-21 16:40:57 +00:00
|
|
|
helper = Gitlab::HashedStorage::RakeHelper
|
|
|
|
helper.relation_summary('projects using Hashed Storage', Project.with_storage_feature(:repository))
|
2017-09-06 05:16:26 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
desc 'Gitlab | Storage | List existing projects using Hashed Storage'
|
|
|
|
task list_hashed_projects: :environment do
|
2018-05-21 16:40:57 +00:00
|
|
|
helper = Gitlab::HashedStorage::RakeHelper
|
|
|
|
helper.projects_list('projects using Hashed Storage', Project.with_storage_feature(:repository))
|
2017-11-18 06:26:07 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
desc 'Gitlab | Storage | Summary of project attachments using Legacy Storage'
|
|
|
|
task legacy_attachments: :environment do
|
2018-05-21 16:40:57 +00:00
|
|
|
helper = Gitlab::HashedStorage::RakeHelper
|
|
|
|
helper.relation_summary('attachments using Legacy Storage', helper.legacy_attachments_relation)
|
2017-11-18 06:26:07 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
desc 'Gitlab | Storage | List existing project attachments using Legacy Storage'
|
|
|
|
task list_legacy_attachments: :environment do
|
2018-05-21 16:40:57 +00:00
|
|
|
helper = Gitlab::HashedStorage::RakeHelper
|
|
|
|
helper.attachments_list('attachments using Legacy Storage', helper.legacy_attachments_relation)
|
2017-11-18 06:26:07 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
desc 'Gitlab | Storage | Summary of project attachments using Hashed Storage'
|
|
|
|
task hashed_attachments: :environment do
|
2018-05-21 16:40:57 +00:00
|
|
|
helper = Gitlab::HashedStorage::RakeHelper
|
|
|
|
helper.relation_summary('attachments using Hashed Storage', helper.hashed_attachments_relation)
|
2017-11-18 06:26:07 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
desc 'Gitlab | Storage | List existing project attachments using Hashed Storage'
|
|
|
|
task list_hashed_attachments: :environment do
|
2018-05-21 16:40:57 +00:00
|
|
|
helper = Gitlab::HashedStorage::RakeHelper
|
|
|
|
helper.attachments_list('attachments using Hashed Storage', helper.hashed_attachments_relation)
|
2017-11-18 06:26:07 +00:00
|
|
|
end
|
2017-09-06 05:16:26 +00:00
|
|
|
end
|
|
|
|
end
|