Schedule stage_id bg migrations in batches of 10
This commit is contained in:
parent
b41b4d2e6a
commit
c467451ea6
|
|
@ -3,6 +3,7 @@ class MigrateStageIdReferenceInBackground < ActiveRecord::Migration
|
|||
|
||||
DOWNTIME = false
|
||||
BATCH_SIZE = 10000
|
||||
RANGE_SIZE = 1000
|
||||
MIGRATION = 'MigrateBuildStageIdReference'.freeze
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
|
@ -17,10 +18,12 @@ class MigrateStageIdReferenceInBackground < ActiveRecord::Migration
|
|||
#
|
||||
def up
|
||||
Build.all.each_batch(of: BATCH_SIZE) do |relation, index|
|
||||
range = relation.pluck('MIN(id)', 'MAX(id)').first
|
||||
schedule = index * 2.minutes
|
||||
relation.each_batch(of: RANGE_SIZE) do |relation|
|
||||
range = relation.pluck('MIN(id)', 'MAX(id)').first
|
||||
|
||||
BackgroundMigrationWorker.perform_in(schedule, MIGRATION, range)
|
||||
BackgroundMigrationWorker
|
||||
.perform_in(index * 2.minutes, MIGRATION, range)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ module Gitlab
|
|||
module BackgroundMigration
|
||||
class MigrateBuildStageIdReference
|
||||
def perform(start_id, stop_id)
|
||||
scope = if stop_id.nonzero?
|
||||
scope = if stop_id.to_i.nonzero?
|
||||
"ci_builds.id BETWEEN #{start_id.to_i} AND #{stop_id.to_i}"
|
||||
else
|
||||
"ci_builds.id >= #{start_id.to_i}"
|
||||
|
|
|
|||
|
|
@ -21,7 +21,8 @@ describe MigrateStageIdReferenceInBackground, :migration, :sidekiq do
|
|||
let(:projects) { table(:projects) }
|
||||
|
||||
before do
|
||||
stub_const("#{described_class.name}::BATCH_SIZE", 2)
|
||||
stub_const("#{described_class.name}::BATCH_SIZE", 3)
|
||||
stub_const("#{described_class.name}::RANGE_SIZE", 2)
|
||||
|
||||
projects.create!(id: 123, name: 'gitlab1', path: 'gitlab1')
|
||||
projects.create!(id: 345, name: 'gitlab2', path: 'gitlab2')
|
||||
|
|
@ -48,9 +49,10 @@ describe MigrateStageIdReferenceInBackground, :migration, :sidekiq do
|
|||
migrate!
|
||||
|
||||
expect(described_class::MIGRATION).to be_scheduled_migration(2.minutes, 1, 2)
|
||||
expect(described_class::MIGRATION).to be_scheduled_migration(4.minutes, 3, 4)
|
||||
expect(described_class::MIGRATION).to be_scheduled_migration(6.minutes, 5, 6)
|
||||
expect(BackgroundMigrationWorker.jobs.size).to eq 3
|
||||
expect(described_class::MIGRATION).to be_scheduled_migration(2.minutes, 3, 3)
|
||||
expect(described_class::MIGRATION).to be_scheduled_migration(4.minutes, 4, 5)
|
||||
expect(described_class::MIGRATION).to be_scheduled_migration(4.minutes, 6, 6)
|
||||
expect(BackgroundMigrationWorker.jobs.size).to eq 4
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in New Issue