[ARVADOS] created: 1.3.0-1829-g1bd856633
Git user
git at public.curoverse.com
Tue Nov 5 18:33:44 UTC 2019
at 1bd856633d8c1c2b1952e2f1d377d668f1ca1e25 (commit)
commit 1bd856633d8c1c2b1952e2f1d377d668f1ca1e25
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Tue Nov 5 13:33:19 2019 -0500
15793: Reuse result set even when each() is the only method called.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/apps/workbench/app/models/arvados_resource_list.rb b/apps/workbench/app/models/arvados_resource_list.rb
index cbd544ebb..99502bd56 100644
--- a/apps/workbench/app/models/arvados_resource_list.rb
+++ b/apps/workbench/app/models/arvados_resource_list.rb
@@ -147,11 +147,16 @@ class ArvadosResourceList
if not @results.nil?
@results.each(&block)
else
+ results = []
self.each_page do |items|
items.each do |i|
+ results << i
block.call i
end
end
+ # Cache results only if all were retrieved (block didn't raise
+ # an exception).
+ @results = results
end
self
end
diff --git a/apps/workbench/test/unit/arvados_resource_list_test.rb b/apps/workbench/test/unit/arvados_resource_list_test.rb
index e9eb2f8ef..270b96203 100644
--- a/apps/workbench/test/unit/arvados_resource_list_test.rb
+++ b/apps/workbench/test/unit/arvados_resource_list_test.rb
@@ -103,4 +103,20 @@ class ResourceListTest < ActiveSupport::TestCase
assert_nil c.items_available
refute_empty c.results
end
+
+ test 'cache results across each(&block) calls' do
+ use_token :admin
+ c = Collection.where(owner_uuid: 'zzzzz-j7d0g-0201collections').with_count('none')
+ c.each do |x|
+ x.description = 'foo'
+ end
+ found = 0
+ c.each do |x|
+ found += 1
+ # We should get the same objects we modified in the loop above
+ # -- not new objects built from another set of API responses.
+ assert_equal 'foo', x.description
+ end
+ assert_equal 201, found
+ end
end
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list