From: Peter Amstutz Date: Fri, 7 Jul 2017 15:27:07 +0000 (-0400) Subject: Merge branch '10584-fuse-stop-threads' refs #10584 X-Git-Tag: 1.1.0~150 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/1e31815d4a0d094633d4acb4f6265d6b8b6e3246?hp=-c Merge branch '10584-fuse-stop-threads' refs #10584 Arvados-DCO-1.1-Signed-off-by: Peter Amstutz --- 1e31815d4a0d094633d4acb4f6265d6b8b6e3246 diff --combined services/fuse/arvados_fuse/fusedir.py index 1399822303,11d26adfb8..30ae6b40e0 --- a/services/fuse/arvados_fuse/fusedir.py +++ b/services/fuse/arvados_fuse/fusedir.py @@@ -511,6 -511,8 +511,8 @@@ class CollectionDirectory(CollectionDir self.collection.stop_threads() def clear(self): + if self.collection is not None: + self.collection.stop_threads() super(CollectionDirectory, self).clear() self._manifest_size = 0 @@@ -677,7 -679,6 +679,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 @@@ -686,41 -687,15 +688,41 @@@ 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)) + @use_counter + @check_update + def __getitem__(self, item): + if super(TagsDirectory, self).__contains__(item): + return super(TagsDirectory, self).__getitem__(item) + with llfuse.lock_released: + tags = self.api.links().list( + filters=[['link_class', '=', 'tag'], ['name', '=', item]], limit=1 + ).execute(num_retries=self.num_retries) + if tags["items"]: + self._extra.add(item) + self.update() + return super(TagsDirectory, self).__getitem__(item) + + @use_counter + @check_update + def __contains__(self, k): + if super(TagsDirectory, self).__contains__(k): + return True + try: + self[k] + return True + except KeyError: + pass + return False + class TagDirectory(Directory): """A special directory that contains as subdirectories all collections visible