[ARVADOS] created: 1.1.0-144-g93bc61c
Git user
git at public.curoverse.com
Thu Nov 16 14:00:37 EST 2017
at 93bc61c084e834f0c258057be84632f2bf676bd5 (commit)
commit 93bc61c084e834f0c258057be84632f2bf676bd5
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Thu Nov 16 13:59:05 2017 -0500
12530: Speed up query by skipping unneeded ActiveRecord loading.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/services/api/app/controllers/arvados/v1/api_client_authorizations_controller.rb b/services/api/app/controllers/arvados/v1/api_client_authorizations_controller.rb
index 9c1c587..66ceb9c 100644
--- a/services/api/app/controllers/arvados/v1/api_client_authorizations_controller.rb
+++ b/services/api/app/controllers/arvados/v1/api_client_authorizations_controller.rb
@@ -94,8 +94,24 @@ class Arvados::V1::ApiClientAuthorizationsController < ApplicationController
@offset = 0
super
wanted_scopes.compact.each do |scope_list|
- sorted_scopes = scope_list.sort
- @objects = @objects.select { |auth| auth.scopes.sort == sorted_scopes }
+ if @objects.respond_to?(:where) && scope_list.length < 2
+ @objects = @objects.
+ where('scopes in (?)',
+ [scope_list.to_yaml, SafeJSON.dump(scope_list)])
+ else
+ if @objects.respond_to?(:where)
+ # Eliminate rows with scopes=['all'] before doing the
+ # expensive filter. They are typically the majority of
+ # rows, and they obviously won't match given
+ # scope_list.length>=2, so loading them all into
+ # ActiveRecord objects is a huge waste of time.
+ @objects = @objects.
+ where('scopes not in (?)',
+ [['all'].to_yaml, SafeJSON.dump(['all'])])
+ end
+ sorted_scopes = scope_list.sort
+ @object = @objects.select { |auth| auth.scopes.sort == sorted_scopes }
+ end
end
@limit = @request_limit
@offset = @request_offset
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list