summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
Diffstat (limited to 'db')
-rw-r--r--db/post_migrate/20170628080858_migrate_stage_id_reference_in_background.rb29
1 files changed, 29 insertions, 0 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
new file mode 100644
index 00000000000..ebec4cb6bb7
--- /dev/null
+++ b/db/post_migrate/20170628080858_migrate_stage_id_reference_in_background.rb
@@ -0,0 +1,29 @@
+class MigrateStageIdReferenceInBackground < ActiveRecord::Migration
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ BATCH_SIZE = 10000
+ MIGRATION = 'MigrateBuildStageIdReference'.freeze
+
+ disable_ddl_transaction!
+
+ class Build < ActiveRecord::Base
+ self.table_name = 'ci_builds'
+ end
+
+ def up
+ index = 1
+
+ Build.where(stage_id: nil).in_batches(of: BATCH_SIZE) do |relation|
+ jobs = relation.pluck(:id).map { |id| [MIGRATION, [id]] }
+ schedule = index * 2.minutes
+ index += 1
+
+ BackgroundMigrationWorker.perform_bulk_in(schedule, jobs)
+ end
+ end
+
+ def down
+ # noop
+ end
+end