提交 d4e5ac1b 编写于 作者: T Toon Claes

Use EachBatch concern to loop over batches

上级 2074f39a
......@@ -19,7 +19,7 @@ class NamespacelessProjectDestroyWorker
return
end
return if namespace?(project) # Reject doing anything for projects that *do* have a namespace
return if project.namespace # Reject doing anything for projects that *do* have a namespace
project.team.truncate
......@@ -30,10 +30,6 @@ class NamespacelessProjectDestroyWorker
private
def namespace?(project)
project.namespace_id && Namespace.exists?(project.namespace_id)
end
def unlink_fork(project)
merge_requests = project.forked_from_project.merge_requests.opened.from_project(project)
......
......@@ -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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册