17119: Make arv-mount work with the new filter groups code. Also in
authorWard Vandewege <ward@curii.com>
Mon, 15 Mar 2021 17:16:32 +0000 (13:16 -0400)
committerWard Vandewege <ward@curii.com>
Mon, 15 Mar 2021 21:12:43 +0000 (17:12 -0400)
arv-mount, lower the default project cache TTL from 60s to 3s,
and enable its use by default anywhere in arv-mount (it was only enabled
under home/).

Arvados-DCO-1.1-Signed-off-by: Ward Vandewege <ward@curii.com>

services/fuse/arvados_fuse/fusedir.py

index cfef43fdbe44f309711438d32ccd4594ffcb86d8..e8da789fa5fbcff8682cbc0fca251bdf9a7c23a8 100644 (file)
@@ -683,11 +683,9 @@ and the directory will appear if it exists.
 
             if group_uuid_pattern.match(k):
                 project = self.api.groups().list(
-                    filters=[["uuid", "=", k]]).execute(num_retries=self.num_retries)
+                    filters=[['group_class', 'in', ['project','filter']], ["uuid", "=", k]]).execute(num_retries=self.num_retries)
                 if project[u'items_available'] == 0:
                     return False
-                if project[u'items'][0][u'group_class'] != u'project' and project[u'items'][0][u'group_class'] != u'filter':
-                    return False
                 e = self.inodes.add_entry(ProjectDirectory(
                     self.inode, self.inodes, self.api, self.num_retries, project[u'items'][0]))
             else:
@@ -813,7 +811,7 @@ class ProjectDirectory(Directory):
     """A special directory that contains the contents of a project."""
 
     def __init__(self, parent_inode, inodes, api, num_retries, project_object,
-                 poll=False, poll_time=60):
+                 poll=True, poll_time=3):
         super(ProjectDirectory, self).__init__(parent_inode, inodes, api.config)
         self.api = api
         self.num_retries = num_retries
@@ -901,7 +899,7 @@ class ProjectDirectory(Directory):
                                                  self.num_retries,
                                                  uuid=self.project_uuid,
                                                  filters=[["uuid", "is_a", "arvados#group"],
-                                                          ["group_class", "=", "project"]])
+                                                          ["groups.group_class", "in", ["project","filter"]]])
                 contents.extend(arvados.util.list_all(self.api.groups().contents,
                                                       self.num_retries,
                                                       uuid=self.project_uuid,
@@ -936,7 +934,7 @@ class ProjectDirectory(Directory):
             else:
                 namefilter = ["name", "in", [k, k2]]
             contents = self.api.groups().list(filters=[["owner_uuid", "=", self.project_uuid],
-                                                       ["group_class", "=", "project"],
+                                                       ["group_class", "in", ["project","filter"]],
                                                        namefilter],
                                               limit=2).execute(num_retries=self.num_retries)["items"]
             if not contents:
@@ -1105,7 +1103,7 @@ class SharedDirectory(Directory):
                 if 'httpMethod' in methods.get('shared', {}):
                     page = []
                     while True:
-                        resp = self.api.groups().shared(filters=[['group_class', '=', 'project']]+page,
+                        resp = self.api.groups().shared(filters=[['group_class', 'in', ['project','filter']]]+page,
                                                         order="uuid",
                                                         limit=10000,
                                                         count="none",
@@ -1122,7 +1120,7 @@ class SharedDirectory(Directory):
                 else:
                     all_projects = arvados.util.list_all(
                         self.api.groups().list, self.num_retries,
-                        filters=[['group_class','=','project']],
+                        filters=[['group_class','in',['project','filter']]],
                         select=["uuid", "owner_uuid"])
                     for ob in all_projects:
                         objects[ob['uuid']] = ob