lib/gdk/command/truncate_legacy_tables.rb (61 lines of code) (raw):

# frozen_string_literal: true require_relative '../../gdk' module GDK module Command # Truncate legacy database tables to remove stale data in the CI decomposed database class TruncateLegacyTables < BaseCommand FLAG_FILE = "#{GDK.root}/.cache/.truncate_tables".freeze def run(_args = []) unless truncation_needed? GDK::Output.info('Truncation not required as your GDK is up-to-date.') return true end ensure_databases_running truncate_tables true end def truncation_needed? ci_database_enabled? && !geo_secondary? && !flag_file_exists? end private def ci_database_enabled? GDK.config.gitlab.rails.databases.ci.enabled end def geo_secondary? GDK.config.geo.secondary? end def flag_file_exists? File.exist?(FLAG_FILE) end def ensure_databases_running GDK::Command::Start.new.run(['rails-migration-dependencies']) end def truncate_tables GDK::Output.notice('Ensuring legacy data in main & ci databases are truncated.') if execute_truncation_tasks report_success create_flag_file else report_failure end end def execute_truncation_tasks rake_tasks = %w[ gitlab:db:lock_writes gitlab:db:truncate_legacy_tables:main gitlab:db:truncate_legacy_tables:ci gitlab:db:unlock_writes ].freeze GDK::Execute::Rake.new(*rake_tasks).execute_in_gitlab.success? end def report_success GDK::Output.success('Legacy table truncation completed successfully.') end def create_flag_file FileUtils.mkdir_p(File.dirname(FLAG_FILE)) FileUtils.touch(FLAG_FILE) end def report_failure GDK::Output.error('Legacy table truncation failed.') end end end end