14259: Iterate just once when scanning for remote blocks.
authorLucas Di Pentima <ldipentima@veritasgenetics.com>
Wed, 31 Oct 2018 18:43:46 +0000 (15:43 -0300)
committerLucas Di Pentima <ldipentima@veritasgenetics.com>
Wed, 31 Oct 2018 18:43:46 +0000 (15:43 -0300)
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <ldipentima@veritasgenetics.com>

sdk/python/arvados/collection.py

index 55797bdfebd53a49db6acd5bf6ea6f1443a317f3..13301b29728b763d8a4abd87555cf3e68870e164 100644 (file)
@@ -1037,18 +1037,19 @@ class RichCollectionBase(CollectionBase):
           different subdirectories.
 
         """
-        for filename in [f for f in self.keys() if isinstance(self[f], ArvadosFile)]:
-            for s in self[filename].segments():
-                if '+R' in s.locator:
-                    try:
-                        loc = remote_blocks[s.locator]
-                    except KeyError:
-                        loc = self._my_keep().refresh_signature(s.locator)
-                        remote_blocks[s.locator] = loc
-                    s.locator = loc
-                    self.set_committed(False)
-        for dirname in [d for d in self.keys() if isinstance(self[d], RichCollectionBase)]:
-            remote_blocks = self[dirname]._copy_remote_blocks(remote_blocks)
+        for item in self:
+            if isinstance(self[item], ArvadosFile):
+                for s in self[item].segments():
+                    if '+R' in s.locator:
+                        try:
+                            loc = remote_blocks[s.locator]
+                        except KeyError:
+                            loc = self._my_keep().refresh_signature(s.locator)
+                            remote_blocks[s.locator] = loc
+                        s.locator = loc
+                        self.set_committed(False)
+            elif isinstance(self[item], RichCollectionBase):
+                remote_blocks = self[item]._copy_remote_blocks(remote_blocks)
         return remote_blocks
 
     @synchronized