diff options
Diffstat (limited to 'db/post_migrate/20170523083112_migrate_old_artifacts.rb')
-rw-r--r-- | db/post_migrate/20170523083112_migrate_old_artifacts.rb | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/db/post_migrate/20170523083112_migrate_old_artifacts.rb b/db/post_migrate/20170523083112_migrate_old_artifacts.rb deleted file mode 100644 index 55e155c7619..00000000000 --- a/db/post_migrate/20170523083112_migrate_old_artifacts.rb +++ /dev/null @@ -1,72 +0,0 @@ -class MigrateOldArtifacts < ActiveRecord::Migration[4.2] - include Gitlab::Database::MigrationHelpers - - DOWNTIME = false - - disable_ddl_transaction! - - # This uses special heuristic to find potential candidates for data migration - # Read more about this here: https://gitlab.com/gitlab-org/gitlab-ce/issues/32036#note_30422345 - - def up - builds_with_artifacts.find_each do |build| - build.migrate_artifacts! - end - end - - def down - end - - private - - def builds_with_artifacts - Build.with_artifacts - .joins('JOIN projects ON projects.id = ci_builds.project_id') - .where('ci_builds.id < ?', min_id) - .where('projects.ci_id IS NOT NULL') - .select('id', 'created_at', 'project_id', 'projects.ci_id AS ci_id') - end - - def min_id - Build.joins('JOIN projects ON projects.id = ci_builds.project_id') - .where('projects.ci_id IS NULL') - .pluck('coalesce(min(ci_builds.id), 0)') - .first - end - - class Build < ActiveRecord::Base - self.table_name = 'ci_builds' - - scope :with_artifacts, -> { where.not(artifacts_file: [nil, '']) } - - def migrate_artifacts! - return unless File.exist?(source_artifacts_path) - return if File.exist?(target_artifacts_path) - - ensure_target_path - - FileUtils.move(source_artifacts_path, target_artifacts_path) - end - - private - - def source_artifacts_path - @source_artifacts_path ||= - File.join(Gitlab.config.artifacts.path, - created_at.utc.strftime('%Y_%m'), - ci_id.to_s, id.to_s) - end - - def target_artifacts_path - @target_artifacts_path ||= - File.join(Gitlab.config.artifacts.path, - created_at.utc.strftime('%Y_%m'), - project_id.to_s, id.to_s) - end - - def ensure_target_path - directory = File.dirname(target_artifacts_path) - FileUtils.mkdir_p(directory) unless Dir.exist?(directory) - end - end -end |