[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