summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-07-07 15:44:47 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-07-07 15:45:32 +0200
commitc467451ea6f39f498b458e11b5f8a74c53d3541d (patch)
tree886bb9516b45fa738fc83f278a365cac92b8cc07
parentb41b4d2e6a44a04fc3e6fff09cf45f93033ff0ad (diff)
downloadgitlab-ce-c467451ea6f39f498b458e11b5f8a74c53d3541d.tar.gz
Schedule stage_id bg migrations in batches of 10
-rw-r--r--db/post_migrate/20170628080858_migrate_stage_id_reference_in_background.rb9
-rw-r--r--lib/gitlab/background_migration/migrate_build_stage_id_reference.rb2
-rw-r--r--spec/migrations/migrate_stage_id_reference_in_background_spec.rb10
3 files changed, 13 insertions, 8 deletions
diff --git a/db/post_migrate/20170628080858_migrate_stage_id_reference_in_background.rb b/db/post_migrate/20170628080858_migrate_stage_id_reference_in_background.rb
index 107a5661329..5b1ff9b8849 100644
--- a/db/post_migrate/20170628080858_migrate_stage_id_reference_in_background.rb
+++ b/db/post_migrate/20170628080858_migrate_stage_id_reference_in_background.rb
@@ -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
diff --git a/lib/gitlab/background_migration/migrate_build_stage_id_reference.rb b/lib/gitlab/background_migration/migrate_build_stage_id_reference.rb
index 0705b26056d..dcd5ecdf322 100644
--- a/lib/gitlab/background_migration/migrate_build_stage_id_reference.rb
+++ b/lib/gitlab/background_migration/migrate_build_stage_id_reference.rb
@@ -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}"
diff --git a/spec/migrations/migrate_stage_id_reference_in_background_spec.rb b/spec/migrations/migrate_stage_id_reference_in_background_spec.rb
index 90ad5c39089..e829a9238f6 100644
--- a/spec/migrations/migrate_stage_id_reference_in_background_spec.rb
+++ b/spec/migrations/migrate_stage_id_reference_in_background_spec.rb
@@ -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