2021-03-11 19:13:27 +05:30
# frozen_string_literal: true
2021-03-08 18:12:59 +05:30
require 'logger'
namespace :gitlab do
namespace :pages do
desc " GitLab | Pages | Migrate legacy storage to zip format "
task migrate_legacy_storage : :gitlab_environment do
logger . info ( 'Starting to migrate legacy pages storage to zip deployments' )
2021-03-11 19:13:27 +05:30
result = :: Pages :: MigrateFromLegacyStorageService . new ( logger ,
2021-04-29 21:17:54 +05:30
ignore_invalid_entries : ignore_invalid_entries ,
mark_projects_as_not_deployed : mark_projects_as_not_deployed )
. execute_with_threads ( threads : migration_threads , batch_size : batch_size )
2021-03-11 19:13:27 +05:30
logger . info ( " A total of #{ result [ :migrated ] + result [ :errored ] } projects were processed. " )
logger . info ( " - The #{ result [ :migrated ] } projects migrated successfully " )
logger . info ( " - The #{ result [ :errored ] } projects failed to be migrated " )
end
desc " GitLab | Pages | DANGER: Removes data which was migrated from legacy storage on zip storage. Can be used if some bugs in migration are discovered and migration needs to be restarted from scratch. "
task clean_migrated_zip_storage : :gitlab_environment do
destroyed_deployments = 0
logger . info ( " Starting to delete migrated pages deployments " )
:: PagesDeployment . migrated_from_legacy_storage . each_batch ( of : batch_size ) do | batch |
destroyed_deployments += batch . count
# we need to destroy associated files, so can't use delete_all
batch . destroy_all # rubocop: disable Cop/DestroyAll
logger . info ( " #{ destroyed_deployments } deployments were deleted " )
2021-03-08 18:12:59 +05:30
end
end
2021-03-11 19:13:27 +05:30
def logger
@logger || = Logger . new ( STDOUT )
end
def migration_threads
ENV . fetch ( 'PAGES_MIGRATION_THREADS' , '3' ) . to_i
end
def batch_size
ENV . fetch ( 'PAGES_MIGRATION_BATCH_SIZE' , '10' ) . to_i
end
def ignore_invalid_entries
Gitlab :: Utils . to_boolean (
ENV . fetch ( 'PAGES_MIGRATION_IGNORE_INVALID_ENTRIES' , 'false' )
)
end
2021-04-29 21:17:54 +05:30
def mark_projects_as_not_deployed
Gitlab :: Utils . to_boolean (
ENV . fetch ( 'PAGES_MIGRATION_MARK_PROJECTS_AS_NOT_DEPLOYED' , 'false' )
)
end
namespace :deployments do
task migrate_to_object_storage : :gitlab_environment do
logger = Logger . new ( STDOUT )
2021-06-08 01:23:25 +05:30
helper = Gitlab :: LocalAndRemoteStorageMigration :: PagesDeploymentMigrater . new ( logger )
2021-04-29 21:17:54 +05:30
begin
helper . migrate_to_remote_storage
2021-06-08 01:23:25 +05:30
rescue StandardError = > e
2021-04-29 21:17:54 +05:30
logger . error ( e . message )
end
end
task migrate_to_local : :gitlab_environment do
logger = Logger . new ( STDOUT )
2021-06-08 01:23:25 +05:30
helper = Gitlab :: LocalAndRemoteStorageMigration :: PagesDeploymentMigrater . new ( logger )
2021-04-29 21:17:54 +05:30
begin
helper . migrate_to_local_storage
2021-06-08 01:23:25 +05:30
rescue StandardError = > e
2021-04-29 21:17:54 +05:30
logger . error ( e . message )
end
end
end
2021-03-08 18:12:59 +05:30
end
end