[ARVADOS] updated: 1.3.0-2548-g600ad8437
Git user
git at public.arvados.org
Thu May 14 21:09:07 UTC 2020
Summary of changes:
.../api/app/controllers/database_controller.rb | 1 +
services/api/app/models/arvados_model.rb | 4 +--
services/api/app/models/database_seeds.rb | 3 +-
services/api/lib/refresh_permission_view.rb | 32 +++-------------------
services/api/test/performance/permission_test.rb | 3 +-
services/api/test/test_helper.rb | 5 ++--
6 files changed, 12 insertions(+), 36 deletions(-)
via 600ad8437dd49105952210c407828fb883dc2aa5 (commit)
from 6788fa439143ef41e32f7dcc1373d1ade3d17e01 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit 600ad8437dd49105952210c407828fb883dc2aa5
Author: Peter Amstutz <peter.amstutz at curii.com>
Date: Thu May 14 17:08:48 2020 -0400
16007: Make sure trash table gets refreshed on database reset
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz at curii.com>
diff --git a/services/api/app/controllers/database_controller.rb b/services/api/app/controllers/database_controller.rb
index d6045a5dc..24c6cf5a7 100644
--- a/services/api/app/controllers/database_controller.rb
+++ b/services/api/app/controllers/database_controller.rb
@@ -78,6 +78,7 @@ class DatabaseController < ApplicationController
require 'refresh_permission_view'
refresh_permission_view
+ refresh_trashed
# Done.
send_json success: true
diff --git a/services/api/app/models/arvados_model.rb b/services/api/app/models/arvados_model.rb
index 00f9254b2..e168cc608 100644
--- a/services/api/app/models/arvados_model.rb
+++ b/services/api/app/models/arvados_model.rb
@@ -296,14 +296,14 @@ class ArvadosModel < ApplicationRecord
if !include_trash
if sql_table != "api_client_authorizations"
# Only include records where the owner is not trashed
- sql_conds = "#{sql_table}.owner_uuid NOT IN (SELECT group_uuid FROM trashed_groups "+
+ sql_conds = "#{sql_table}.owner_uuid NOT IN (SELECT group_uuid FROM #{TRASHED_GROUPS} "+
"where trash_at <= statement_timestamp()) #{exclude_trashed_records}"
end
end
else
trashed_check = ""
if !include_trash then
- trashed_check = "AND target_uuid NOT IN (SELECT group_uuid FROM trashed_groups where trash_at <= statement_timestamp())"
+ trashed_check = "AND target_uuid NOT IN (SELECT group_uuid FROM #{TRASHED_GROUPS} where trash_at <= statement_timestamp())"
end
# Note: it is possible to combine the direct_check and
diff --git a/services/api/app/models/database_seeds.rb b/services/api/app/models/database_seeds.rb
index d546a0466..0fea2cf7b 100644
--- a/services/api/app/models/database_seeds.rb
+++ b/services/api/app/models/database_seeds.rb
@@ -14,6 +14,7 @@ class DatabaseSeeds
anonymous_group_read_permission
anonymous_user
empty_collection
- do_refresh_permission_view
+ refresh_permission_view
+ refresh_trashed
end
end
diff --git a/services/api/lib/refresh_permission_view.rb b/services/api/lib/refresh_permission_view.rb
index 77235c000..c00ceaf99 100644
--- a/services/api/lib/refresh_permission_view.rb
+++ b/services/api/lib/refresh_permission_view.rb
@@ -5,7 +5,7 @@
PERMISSION_VIEW = "materialized_permissions"
TRASHED_GROUPS = "trashed_groups"
-def do_refresh_permission_view
+def refresh_permission_view
ActiveRecord::Base.transaction do
ActiveRecord::Base.connection.execute("LOCK TABLE #{PERMISSION_VIEW}")
ActiveRecord::Base.connection.execute("DELETE FROM #{PERMISSION_VIEW}")
@@ -18,35 +18,11 @@ from users, lateral search_permission_graph(users.uuid, 3) as g where g.val > 0
end
end
-def refresh_permission_view(async=false)
- if async and Rails.configuration.API.AsyncPermissionsUpdateInterval > 0
- exp = Rails.configuration.API.AsyncPermissionsUpdateInterval.seconds
- need = false
- Rails.cache.fetch('AsyncRefreshPermissionView', expires_in: exp) do
- need = true
- end
- if need
- # Schedule a new permission update and return immediately
- Thread.new do
- Thread.current.abort_on_exception = false
- begin
- sleep(exp)
- Rails.cache.delete('AsyncRefreshPermissionView')
- do_refresh_permission_view
- rescue => e
- Rails.logger.error "Updating permission view: #{e}\n#{e.backtrace.join("\n\t")}"
- ensure
- ActiveRecord::Base.connection.close
- end
- end
- true
- end
- else
- do_refresh_permission_view
- end
+def refresh_trashed
+ ActiveRecord::Base.connection.execute("DELETE FROM #{TRASHED_GROUPS}")
+ ActiveRecord::Base.connection.execute("INSERT INTO #{TRASHED_GROUPS} select * from compute_trashed()")
end
-
def update_permissions perm_origin_uuid, starting_uuid, perm_level, check=true
# Update a subset of the permission graph
# perm_level is the inherited permission
diff --git a/services/api/test/performance/permission_test.rb b/services/api/test/performance/permission_test.rb
index 81edf488a..0fea3b135 100644
--- a/services/api/test/performance/permission_test.rb
+++ b/services/api/test/performance/permission_test.rb
@@ -40,8 +40,7 @@ class PermissionPerfTest < ActionDispatch::IntegrationTest
end
end
end
- #User.invalidate_permissions_cache
- do_refresh_permission_view
+ refresh_permission_view
end
end)
end
diff --git a/services/api/test/test_helper.rb b/services/api/test/test_helper.rb
index c6ea0b320..12f729e33 100644
--- a/services/api/test/test_helper.rb
+++ b/services/api/test/test_helper.rb
@@ -209,6 +209,5 @@ class ActionDispatch::IntegrationTest
end
# Ensure permissions are computed from the test fixtures.
-do_refresh_permission_view
-ActiveRecord::Base.connection.execute("DELETE FROM #{TRASHED_GROUPS}")
-ActiveRecord::Base.connection.execute("INSERT INTO #{TRASHED_GROUPS} select * from compute_trashed()")
+refresh_permission_view
+refresh_trashed
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list