Add background migration that migrates stages indices
This commit is contained in:
parent
3b04a3dc4e
commit
02999234d4
2 changed files with 63 additions and 0 deletions
27
lib/gitlab/background_migration/migrate_stage_index.rb
Normal file
27
lib/gitlab/background_migration/migrate_stage_index.rb
Normal file
|
@ -0,0 +1,27 @@
|
|||
# frozen_string_literal: true
|
||||
# rubocop:disable Style/Documentation
|
||||
|
||||
module Gitlab
|
||||
module BackgroundMigration
|
||||
class MigrateStageIndex
|
||||
module Migratable
|
||||
class Stage < ActiveRecord::Base
|
||||
self.table_name = 'ci_stages'
|
||||
end
|
||||
end
|
||||
|
||||
def perform(start_id, stop_id)
|
||||
sql = <<~SQL
|
||||
UPDATE ci_stages
|
||||
SET index =
|
||||
(SELECT stage_idx FROM ci_builds
|
||||
WHERE ci_builds.stage_id = ci_stages.id
|
||||
GROUP BY ci_builds.stage_idx ORDER BY COUNT(*) DESC LIMIT 1)
|
||||
WHERE ci_stages.id BETWEEN #{start_id.to_i} AND #{stop_id.to_i}
|
||||
SQL
|
||||
|
||||
ActiveRecord::Base.connection.execute(sql)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,36 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Gitlab::BackgroundMigration::MigrateStageIndex, :migration, schema: 20180420080616 do
|
||||
let(:namespaces) { table(:namespaces) }
|
||||
let(:projects) { table(:projects) }
|
||||
let(:pipelines) { table(:ci_pipelines) }
|
||||
let(:stages) { table(:ci_stages) }
|
||||
let(:jobs) { table(:ci_builds) }
|
||||
|
||||
|
||||
before do
|
||||
namespaces.create(id: 10, name: 'gitlab-org', path: 'gitlab-org')
|
||||
projects.create!(id: 11, namespace_id: 10, name: 'gitlab', path: 'gitlab')
|
||||
pipelines.create!(id: 12, project_id: 11, ref: 'master', sha: 'adf43c3a')
|
||||
|
||||
stages.create(id: 100, project_id: 11, pipeline_id: 12, name: 'build')
|
||||
stages.create(id: 101, project_id: 11, pipeline_id: 12, name: 'test')
|
||||
|
||||
jobs.create!(id: 121, commit_id: 12, project_id: 11,
|
||||
stage_idx: 2, stage_id: 100)
|
||||
jobs.create!(id: 122, commit_id: 12, project_id: 11,
|
||||
stage_idx: 2, stage_id: 100)
|
||||
jobs.create!(id: 123, commit_id: 12, project_id: 11,
|
||||
stage_idx: 10, stage_id: 100)
|
||||
jobs.create!(id: 124, commit_id: 12, project_id: 11,
|
||||
stage_idx: 3, stage_id: 101)
|
||||
end
|
||||
|
||||
it 'correctly migrates stages indices' do
|
||||
expect(stages.all.pluck(:index)).to all(be_nil)
|
||||
|
||||
described_class.new.perform(100, 101)
|
||||
|
||||
expect(stages.all.pluck(:index)).to eq [2, 3]
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue