20470: Disallow selecting manifest_text on group contents
[arvados.git] / services / api / app / controllers / sys_controller.rb
index 08a672cc0be3b48d3ed425abb6005454f217d3b2..7d20cf77fdcd555de70d54fa931767337b7a586b 100644 (file)
@@ -12,19 +12,21 @@ class SysController < ApplicationController
       # Sweep trashed collections
       Collection.
         where('delete_at is not null and delete_at < statement_timestamp()').
+        in_batches(of: 15).
         destroy_all
       Collection.
         where('is_trashed = false and trash_at < statement_timestamp()').
+        in_batches(of: 15).
         update_all('is_trashed = true')
 
-      # Sweep trashed projects and their contents
+      # Sweep trashed projects and their contents (as well as role
+      # groups that were trashed before #18340 when that was
+      # disallowed)
       Group.
-        where({group_class: 'project'}).
         where('delete_at is not null and delete_at < statement_timestamp()').each do |project|
           delete_project_and_contents(project.uuid)
       end
       Group.
-        where({group_class: 'project'}).
         where('is_trashed = false and trash_at < statement_timestamp()').
         update_all('is_trashed = true')
 
@@ -38,8 +40,8 @@ class SysController < ApplicationController
 
   def delete_project_and_contents(p_uuid)
     p = Group.find_by_uuid(p_uuid)
-    if !p || p.group_class != 'project'
-      raise "can't sweep group '#{p_uuid}', it may not exist or not be a project"
+    if !p
+      raise "can't sweep group '#{p_uuid}', it may not exist"
     end
     # First delete sub projects
     Group.where({group_class: 'project', owner_uuid: p_uuid}).each do |sub_project|
@@ -50,7 +52,7 @@ class SysController < ApplicationController
     skipped_classes = ['Group', 'User']
     ActiveRecord::Base.descendants.reject(&:abstract_class?).each do |klass|
       if !skipped_classes.include?(klass.name) && klass.columns.collect(&:name).include?('owner_uuid')
-        klass.where({owner_uuid: p_uuid}).destroy_all
+        klass.where({owner_uuid: p_uuid}).in_batches(of: 15).destroy_all
       end
     end
     # Finally delete the project itself