gitlab-org--gitlab-foss/db/migrate/20170503140201_reschedule_project_authorizations.rb
Jan Provaznik 0fc9f9d3e7 Add version 4.2 to all existing migrations
DB schema generated by a migration may look different in
rails 4 and 5 (because rails 5 may use different default values).
For this reason it's important to explicitly set for which rails
version a migration was written for.

See https://stackoverflow.com/questions/35929869/activerecordmigration-deprecation-warning-asks-for-rails-version-but-im-no/35930912#35930912
2018-11-22 13:18:28 +01:00

44 lines
1 KiB
Ruby

# See http://doc.gitlab.com/ce/development/migration_style_guide.html
# for more information on how to write migrations for GitLab.
class RescheduleProjectAuthorizations < ActiveRecord::Migration[4.2]
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
disable_ddl_transaction!
class User < ActiveRecord::Base
self.table_name = 'users'
end
def up
offset = 0
batch = 5000
start = Time.now
loop do
relation = User.where('id > ?', offset)
user_ids = relation.limit(batch).reorder(id: :asc).pluck(:id)
break if user_ids.empty?
offset = user_ids.last
# This will schedule each batch 5 minutes after the previous batch was
# scheduled. This smears out the load over time, instead of immediately
# scheduling a million jobs.
Sidekiq::Client.push_bulk(
'queue' => 'authorized_projects',
'args' => user_ids.zip,
'class' => 'AuthorizedProjectsWorker',
'at' => start.to_i
)
start += 5.minutes
end
end
def down
end
end