From 048821c9c8dc25c4c78c3247fd15430cbadd6190 Mon Sep 17 00:00:00 2001 From: Peter Amstutz Date: Thu, 29 Jun 2017 18:28:30 -0400 Subject: [PATCH] 8624: New behavior for by_tag/ dir. Allow 'cd' into any tag directory that exists on the server, even if it isn't returned in the listing. Also increase listing limit. Arvados-DCO-1.1-Signed-off-by: Peter Amstutz --- services/fuse/arvados_fuse/fusedir.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/services/fuse/arvados_fuse/fusedir.py b/services/fuse/arvados_fuse/fusedir.py index 0361ffeab6..399992fad3 100644 --- a/services/fuse/arvados_fuse/fusedir.py +++ b/services/fuse/arvados_fuse/fusedir.py @@ -677,6 +677,7 @@ class TagsDirectory(Directory): self.num_retries = num_retries self._poll = True self._poll_time = poll_time + self._extra = set() def want_event_subscribe(self): return True @@ -685,15 +686,30 @@ class TagsDirectory(Directory): def update(self): with llfuse.lock_released: tags = self.api.links().list( - filters=[['link_class', '=', 'tag']], - select=['name'], distinct=True + filters=[['link_class', '=', 'tag'], ["name", "!=", ""]], + select=['name'], distinct=True, limit=1000 ).execute(num_retries=self.num_retries) if "items" in tags: - self.merge(tags['items'], + self.merge(tags['items']+[{"name": n} for n in self._extra], lambda i: i['name'], lambda a, i: a.tag == i['name'], lambda i: TagDirectory(self.inode, self.inodes, self.api, self.num_retries, i['name'], poll=self._poll, poll_time=self._poll_time)) + def __contains__(self, k): + if super(TagsDirectory, self).__contains__(k): + return True + else: + with llfuse.lock_released: + tags = self.api.links().list( + filters=[['link_class', '=', 'tag'], ['name', '=', k]], limit=1 + ).execute(num_retries=self.num_retries) + if tags["items"]: + self._extra.add(k) + self.invalidate() + return True + else: + return False + class TagDirectory(Directory): """A special directory that contains as subdirectories all collections visible -- 2.30.2