# See http://doc.gitlab.com/ce/development/migration_style_guide.html # for more information on how to write migrations for GitLab. class RequeuePendingDeleteProjects < ActiveRecord::Migration include Gitlab::Database::MigrationHelpers DOWNTIME = false def up admin = User.find_by(admin: true) return unless admin @offset = 0 loop do ids = pending_delete_batch break if ids.rows.count.zero? args = ids.map { |id| [id['id'], admin.id, {}] } Sidekiq::Client.push_bulk('class' => "ProjectDestroyWorker", 'args' => args) @offset += 1 end end def down # noop end private def pending_delete_batch connection.exec_query(find_batch) end BATCH_SIZE = 5000 def find_batch projects = Arel::Table.new(:projects) projects.project(projects[:id]) .where(projects[:pending_delete].eq(true)) .where(projects[:namespace_id].not_eq(nil)) .skip(@offset * BATCH_SIZE) .take(BATCH_SIZE) .to_sql end end