16007: Use incremental updates instead of materialized view for permissions
authorPeter Amstutz <peter.amstutz@curii.com>
Fri, 1 May 2020 18:26:35 +0000 (14:26 -0400)
committerPeter Amstutz <peter.amstutz@curii.com>
Fri, 29 May 2020 02:27:27 +0000 (22:27 -0400)
commit6ba9fdc006d023fe1a56cd28fb87a54dff5265d8
tree74b31f45dbd16db0459f2acb041e9f4c238d5e6c
parent84c91acae26c09d7c9195eeb34e872964c0ccbc3
16007: Use incremental updates instead of materialized view for permissions

Separate 'trashed' from 'permissions' and remove 'trashed' from
permission computation.  Add postgres functions for computing trash
and update trashed_groups incrementally.  Make sure trash table gets
refreshed on database reset.  readable_by() now checks trash_at timestamp.

Drop materialized view and replace with a table that is updated
incrementally.  Add postgres functions for computing permissions.
Initialize materialized_permissions from search_permission_graph.
Call refresh_permissions in database_seeds.  Add index on
materialized_permissions.target_uuid.

Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>
20 files changed:
services/api/app/controllers/database_controller.rb
services/api/app/models/arvados_model.rb
services/api/app/models/database_seeds.rb
services/api/app/models/group.rb
services/api/app/models/link.rb
services/api/app/models/materialized_permission.rb [new file with mode: 0644]
services/api/app/models/trashed_group.rb [new file with mode: 0644]
services/api/app/models/user.rb
services/api/db/migrate/20200501150153_permission_table.rb [new file with mode: 0644]
services/api/db/structure.sql
services/api/lib/refresh_permission_view.rb
services/api/test/fixtures/groups.yml
services/api/test/fixtures/users.yml
services/api/test/functional/arvados/v1/groups_controller_test.rb
services/api/test/integration/groups_test.rb
services/api/test/performance/permission_test.rb
services/api/test/test_helper.rb
services/api/test/unit/collection_test.rb
services/api/test/unit/owner_test.rb
services/api/test/unit/user_test.rb