[arvados] created: 2.6.0-2-g7ea0bf89d

git repository hosting git at public.arvados.org
Thu Apr 13 15:49:20 UTC 2023


        at  7ea0bf89df6f3400a1c96f8838a2a7a1e3706e48 (commit)


commit 7ea0bf89df6f3400a1c96f8838a2a7a1e3706e48
Author: Tom Clegg <tom at curii.com>
Date:   Thu Apr 13 11:47:46 2023 -0400

    20334: Batch permission updates during link dedup migration.
    
    Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom at curii.com>

diff --git a/services/api/db/migrate/20221219165512_dedup_permission_links.rb b/services/api/db/migrate/20221219165512_dedup_permission_links.rb
index ec9ea591d..6ae04cc95 100644
--- a/services/api/db/migrate/20221219165512_dedup_permission_links.rb
+++ b/services/api/db/migrate/20221219165512_dedup_permission_links.rb
@@ -2,37 +2,41 @@
 #
 # SPDX-License-Identifier: AGPL-3.0
 
+require 'update_permissions'
+
 class DedupPermissionLinks < ActiveRecord::Migration[5.2]
   include CurrentApiClient
   def up
     act_as_system_user do
-      rows = ActiveRecord::Base.connection.select_all("SELECT MIN(uuid) AS uuid, COUNT(uuid) AS n FROM links
-        WHERE tail_uuid IS NOT NULL
-         AND head_uuid IS NOT NULL
-         AND link_class = 'permission'
-         AND name in ('can_read', 'can_write', 'can_manage')
-        GROUP BY (tail_uuid, head_uuid)
-        HAVING COUNT(uuid) > 1")
-      rows.each do |row|
-        Rails.logger.debug "DedupPermissionLinks: consolidating #{row['n']} links into #{row['uuid']}"
-        link = Link.find_by_uuid(row['uuid'])
-        # This no-op update has the side effect that the update hooks
-        # will merge the highest available permission into this one
-        # and then delete the others.
-        link.update_attributes!(properties: link.properties.dup)
-      end
+      batch_update_permissions do
+        rows = ActiveRecord::Base.connection.select_all("SELECT MIN(uuid) AS uuid, COUNT(uuid) AS n FROM links
+          WHERE tail_uuid IS NOT NULL
+           AND head_uuid IS NOT NULL
+           AND link_class = 'permission'
+           AND name in ('can_read', 'can_write', 'can_manage')
+          GROUP BY (tail_uuid, head_uuid)
+          HAVING COUNT(uuid) > 1")
+        rows.each do |row|
+          Rails.logger.debug "DedupPermissionLinks: consolidating #{row['n']} links into #{row['uuid']}"
+          link = Link.find_by_uuid(row['uuid'])
+          # This no-op update has the side effect that the update hooks
+          # will merge the highest available permission into this one
+          # and then delete the others.
+          link.update_attributes!(properties: link.properties.dup)
+        end
 
-      rows = ActiveRecord::Base.connection.select_all("SELECT MIN(uuid) AS uuid, COUNT(uuid) AS n FROM links
-        WHERE tail_uuid IS NOT NULL
-         AND head_uuid IS NOT NULL
-         AND link_class = 'permission'
-         AND name = 'can_login'
-        GROUP BY (tail_uuid, head_uuid, properties)
-        HAVING COUNT(uuid) > 1")
-      rows.each do |row|
-        Rails.logger.debug "DedupPermissionLinks: consolidating #{row['n']} links into #{row['uuid']}"
-        link = Link.find_by_uuid(row['uuid'])
-        link.update_attributes!(properties: link.properties.dup)
+        rows = ActiveRecord::Base.connection.select_all("SELECT MIN(uuid) AS uuid, COUNT(uuid) AS n FROM links
+          WHERE tail_uuid IS NOT NULL
+           AND head_uuid IS NOT NULL
+           AND link_class = 'permission'
+           AND name = 'can_login'
+          GROUP BY (tail_uuid, head_uuid, properties)
+          HAVING COUNT(uuid) > 1")
+        rows.each do |row|
+          Rails.logger.debug "DedupPermissionLinks: consolidating #{row['n']} links into #{row['uuid']}"
+          link = Link.find_by_uuid(row['uuid'])
+          link.update_attributes!(properties: link.properties.dup)
+        end
       end
     end
   end

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list