Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/tasks/gitlab/pages.rake')
-rw-r--r--lib/tasks/gitlab/pages.rake68
1 files changed, 44 insertions, 24 deletions
diff --git a/lib/tasks/gitlab/pages.rake b/lib/tasks/gitlab/pages.rake
index e15cbb4e32e..b598dab901d 100644
--- a/lib/tasks/gitlab/pages.rake
+++ b/lib/tasks/gitlab/pages.rake
@@ -1,35 +1,55 @@
+# frozen_string_literal: true
+
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 = Logger.new(STDOUT)
logger.info('Starting to migrate legacy pages storage to zip deployments')
- processed_projects = 0
-
- ProjectPagesMetadatum.only_on_legacy_storage.each_batch(of: 10) do |batch|
- batch.preload(project: [:namespace, :route, pages_metadatum: :pages_deployment]).each do |metadatum|
- project = metadatum.project
-
- result = nil
- time = Benchmark.realtime do
- result = ::Pages::MigrateLegacyStorageToDeploymentService.new(project).execute
- end
- processed_projects += 1
-
- if result[:status] == :success
- logger.info("project_id: #{project.id} #{project.pages_path} has been migrated in #{time} seconds")
- else
- logger.error("project_id: #{project.id} #{project.pages_path} failed to be migrated in #{time} seconds: #{result[:message]}")
- end
- rescue => e
- logger.error("#{e.message} project_id: #{project&.id}")
- Gitlab::ErrorTracking.track_exception(e, project_id: project&.id)
- end
-
- logger.info("#{processed_projects} pages projects are processed")
+
+ result = ::Pages::MigrateFromLegacyStorageService.new(logger,
+ migration_threads: migration_threads,
+ batch_size: batch_size,
+ ignore_invalid_entries: ignore_invalid_entries).execute
+
+ 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")
end
end
+
+ 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
end
end