From d4e5ac1bed844210df089862b234ffb0ff3854f7 Mon Sep 17 00:00:00 2001 From: Toon Claes Date: Fri, 18 Aug 2017 10:02:46 +0200 Subject: Use EachBatch concern to loop over batches --- ...onexisting_namespace_pending_delete_projects.rb | 42 +++++++++++----------- 1 file changed, 21 insertions(+), 21 deletions(-) (limited to 'db/post_migrate') diff --git a/db/post_migrate/20170816102555_cleanup_nonexisting_namespace_pending_delete_projects.rb b/db/post_migrate/20170816102555_cleanup_nonexisting_namespace_pending_delete_projects.rb index fe88f25827f..3f085c17133 100644 --- a/db/post_migrate/20170816102555_cleanup_nonexisting_namespace_pending_delete_projects.rb +++ b/db/post_migrate/20170816102555_cleanup_nonexisting_namespace_pending_delete_projects.rb @@ -8,35 +8,31 @@ class CleanupNonexistingNamespacePendingDeleteProjects < ActiveRecord::Migration disable_ddl_transaction! - def up - @offset = 0 + class Project < ActiveRecord::Base + self.table_name = 'projects' - loop do - ids = pending_delete_batch + include ::EachBatch + end - break if ids.empty? + class Namespace < ActiveRecord::Base + self.table_name = 'namespaces' + end - args = ids.map { |id| Array(id) } + def up + find_projects.each_batch do |batch| + args = batch.pluck(:id).map { |id| [id] } NamespacelessProjectDestroyWorker.bulk_perform_async(args) - - @offset += 1 end end def down - # noop + # NOOP end private - def pending_delete_batch - connection.exec_query(find_batch).map { |row| row['id'].to_i } - end - - BATCH_SIZE = 5000 - - def find_batch + def find_projects projects = Project.arel_table namespaces = Namespace.arel_table @@ -44,11 +40,15 @@ class CleanupNonexistingNamespacePendingDeleteProjects < ActiveRecord::Migration .where(namespaces[:id].eq(projects[:namespace_id])) .exists.not - projects.project(projects[:id]) - .where(projects[:pending_delete].eq(true)) + # SELECT "projects"."id" + # FROM "projects" + # WHERE "projects"."pending_delete" = 't' + # AND (NOT (EXISTS + # (SELECT 1 + # FROM "namespaces" + # WHERE "namespaces"."id" = "projects"."namespace_id"))) + Project.where(projects[:pending_delete].eq(true)) .where(namespace_query) - .skip(@offset * BATCH_SIZE) - .take(BATCH_SIZE) - .to_sql + .select(:id) end end -- cgit v1.2.3