X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/a079a9f1627188e3ef0bb73e004defa2129d25f2..063eb858429a7472c888261d0512fd960e92b7ae:/services/api/db/migrate/20170906224040_materialized_permission_view.rb diff --git a/services/api/db/migrate/20170906224040_materialized_permission_view.rb b/services/api/db/migrate/20170906224040_materialized_permission_view.rb index b8e5101f90..b864f75c12 100644 --- a/services/api/db/migrate/20170906224040_materialized_permission_view.rb +++ b/services/api/db/migrate/20170906224040_materialized_permission_view.rb @@ -4,7 +4,7 @@ class MaterializedPermissionView < ActiveRecord::Migration - @@idxtables = [:collections, :container_requests, :groups, :jobs, :links, :pipeline_instances, :pipeline_templates, :repositories, :users, :virtual_machines, :workflows] + @@idxtables = [:collections, :container_requests, :groups, :jobs, :links, :pipeline_instances, :pipeline_templates, :repositories, :users, :virtual_machines, :workflows, :logs] def up @@ -56,24 +56,22 @@ perm_edges (tail_uuid, head_uuid, val, follow, trashed) AS ( CASE WHEN trash_at IS NOT NULL and trash_at < clock_timestamp() THEN 1 ELSE 0 END FROM groups ), -perm (val, follow, user_uuid, target_uuid, trashed, startnode) AS ( +perm (val, follow, user_uuid, target_uuid, trashed) AS ( SELECT 3::smallint AS val, - false AS follow, + true AS follow, users.uuid::varchar(32) AS user_uuid, users.uuid::varchar(32) AS target_uuid, - 0::smallint AS trashed, - true AS startnode + 0::smallint AS trashed FROM users UNION SELECT LEAST(perm.val, edges.val)::smallint AS val, edges.follow AS follow, perm.user_uuid::varchar(32) AS user_uuid, edges.head_uuid::varchar(32) AS target_uuid, - GREATEST(perm.trashed, edges.trashed)::smallint AS trashed, - false AS startnode + GREATEST(perm.trashed, edges.trashed)::smallint AS trashed FROM perm INNER JOIN perm_edges edges - ON (perm.startnode or perm.follow) AND edges.tail_uuid = perm.target_uuid + ON perm.follow AND edges.tail_uuid = perm.target_uuid ) SELECT user_uuid, target_uuid, @@ -102,13 +100,17 @@ SELECT user_uuid, @@idxtables.each do |table| ActiveRecord::Base.connection.execute("CREATE INDEX index_#{table.to_s}_on_modified_at_uuid ON #{table.to_s} USING btree (modified_at desc, uuid asc)") end + + create_table :permission_refresh_lock + ActiveRecord::Base.connection.execute("REFRESH MATERIALIZED VIEW materialized_permission_view") end def down - remove_index :permission_view, name: 'permission_target_trashed' - remove_index :permission_view, name: 'permission_target_user_trashed_level' + drop_table :permission_refresh_lock + remove_index :materialized_permission_view, name: 'permission_target_trashed' + remove_index :materialized_permission_view, name: 'permission_target_user_trashed_level' @@idxtables.each do |table| - ActiveRecord::Base.connection.execute("DROP INDEX index_#{table.to_s}_on_modified_at_uuid") + ActiveRecord::Base.connection.execute("DROP INDEX IF EXISTS index_#{table.to_s}_on_modified_at_uuid") end ActiveRecord::Base.connection.execute("DROP MATERIALIZED VIEW IF EXISTS materialized_permission_view") end