diff options
author | Toon Claes <toon@iotcl.com> | 2017-08-18 10:02:46 +0200 |
---|---|---|
committer | Toon Claes <toon@iotcl.com> | 2017-08-22 14:31:40 +0200 |
commit | d4e5ac1bed844210df089862b234ffb0ff3854f7 (patch) | |
tree | cee14d82299b2f4ea0bed787dd32a73239ed7d2a | |
parent | 2074f39a47645b5ea453adfba84247f2fcc4f3c7 (diff) | |
download | gitlab-ce-d4e5ac1bed844210df089862b234ffb0ff3854f7.tar.gz |
Use EachBatch concern to loop over batchestc-remove-nonexisting-namespace-pending-delete-projects
-rw-r--r-- | app/workers/namespaceless_project_destroy_worker.rb | 6 | ||||
-rw-r--r-- | db/post_migrate/20170816102555_cleanup_nonexisting_namespace_pending_delete_projects.rb | 42 |
2 files changed, 22 insertions, 26 deletions
diff --git a/app/workers/namespaceless_project_destroy_worker.rb b/app/workers/namespaceless_project_destroy_worker.rb index b148e7082b3..1cfb0be759e 100644 --- a/app/workers/namespaceless_project_destroy_worker.rb +++ b/app/workers/namespaceless_project_destroy_worker.rb @@ -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) 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 |