def update(self): if self.project_object_file == None: self.project_object_file = ObjectFile(self.inode, self.project_object) self.inodes.add_entry(self.project_object_file) def namefn(i): if 'name' in i: if i['name'] is None or len(i['name']) == 0: return None elif collection_uuid_pattern.match( i['uuid']) or group_uuid_pattern.match(i['uuid']): # collection or subproject return i['name'] elif link_uuid_pattern.match( i['uuid']) and i['head_kind'] == 'arvados#collection': # name link return i['name'] elif 'kind' in i and i['kind'].startswith('arvados#'): # something else return "{}.{}".format(i['name'], i['kind'][8:]) else: return None def samefn(a, i): if isinstance(a, CollectionDirectory) or isinstance( a, ProjectDirectory): return a.uuid() == i['uuid'] elif isinstance(a, ObjectFile): return a.uuid() == i['uuid'] and not a.stale() return False try: with llfuse.lock_released: self._updating_lock.acquire() if not self.stale(): return if group_uuid_pattern.match(self.project_uuid): self.project_object = self.api.groups().get( uuid=self.project_uuid).execute( num_retries=self.num_retries) elif user_uuid_pattern.match(self.project_uuid): self.project_object = self.api.users().get( uuid=self.project_uuid).execute( num_retries=self.num_retries) contents = arvados.util.list_all(self.api.groups().contents, self.num_retries, uuid=self.project_uuid) # end with llfuse.lock_released, re-acquire lock self.merge(contents, namefn, samefn, self.createDirectory) finally: self._updating_lock.release()
def update(self): if self.project_object_file == None: self.project_object_file = ObjectFile(self.inode, self.project_object) self.inodes.add_entry(self.project_object_file) def namefn(i): if 'name' in i: if i['name'] is None or len(i['name']) == 0: return None elif collection_uuid_pattern.match( i['uuid']) or group_uuid_pattern.match(i['uuid']): # collection or subproject return i['name'] elif link_uuid_pattern.match( i['uuid']) and i['head_kind'] == 'arvados#collection': # name link return i['name'] elif 'kind' in i and i['kind'].startswith('arvados#'): # something else return "{}.{}".format(i['name'], i['kind'][8:]) else: return None def samefn(a, i): if isinstance(a, CollectionDirectory): return a.collection_locator == i['uuid'] elif isinstance(a, ProjectDirectory): return a.uuid == i['uuid'] elif isinstance(a, ObjectFile): return a.uuid == i['uuid'] and not a.stale() return False with llfuse.lock_released: if group_uuid_pattern.match(self.uuid): self.project_object = self.api.groups().get( uuid=self.uuid).execute(num_retries=self.num_retries) elif user_uuid_pattern.match(self.uuid): self.project_object = self.api.users().get( uuid=self.uuid).execute(num_retries=self.num_retries) contents = arvados.util.list_all(self.api.groups().contents, self.num_retries, uuid=self.uuid) # Name links will be obsolete soon, take this out when there are no more pre-#3036 in use. contents += arvados.util.list_all( self.api.links().list, self.num_retries, filters=[['tail_uuid', '=', self.uuid], ['link_class', '=', 'name']]) # end with llfuse.lock_released, re-acquire lock self.merge(contents, namefn, samefn, self.createDirectory)
def update(self): if self.project_object_file == None: self.project_object_file = ObjectFile(self.inode, self.project_object) self.inodes.add_entry(self.project_object_file) def namefn(i): if 'name' in i: if i['name'] is None or len(i['name']) == 0: return None elif collection_uuid_pattern.match(i['uuid']) or group_uuid_pattern.match(i['uuid']): # collection or subproject return i['name'] elif link_uuid_pattern.match(i['uuid']) and i['head_kind'] == 'arvados#collection': # name link return i['name'] elif 'kind' in i and i['kind'].startswith('arvados#'): # something else return "{}.{}".format(i['name'], i['kind'][8:]) else: return None def samefn(a, i): if isinstance(a, CollectionDirectory) or isinstance(a, ProjectDirectory): return a.uuid() == i['uuid'] elif isinstance(a, ObjectFile): return a.uuid() == i['uuid'] and not a.stale() return False try: with llfuse.lock_released: self._updating_lock.acquire() if not self.stale(): return if group_uuid_pattern.match(self.project_uuid): self.project_object = self.api.groups().get( uuid=self.project_uuid).execute(num_retries=self.num_retries) elif user_uuid_pattern.match(self.project_uuid): self.project_object = self.api.users().get( uuid=self.project_uuid).execute(num_retries=self.num_retries) contents = arvados.util.list_all(self.api.groups().contents, self.num_retries, uuid=self.project_uuid) # end with llfuse.lock_released, re-acquire lock self.merge(contents, namefn, samefn, self.createDirectory) finally: self._updating_lock.release()
def update(self): if self.project_object_file == None: self.project_object_file = ObjectFile(self.inode, self.project_object) self.inodes.add_entry(self.project_object_file) if not self._full_listing: return True def samefn(a, i): if isinstance(a, CollectionDirectory) or isinstance( a, ProjectDirectory): return a.uuid() == i['uuid'] elif isinstance(a, ObjectFile): return a.uuid() == i['uuid'] and not a.stale() return False try: with llfuse.lock_released: self._updating_lock.acquire() if not self.stale(): return if group_uuid_pattern.match(self.project_uuid): self.project_object = self.api.groups().get( uuid=self.project_uuid).execute( num_retries=self.num_retries) elif user_uuid_pattern.match(self.project_uuid): self.project_object = self.api.users().get( uuid=self.project_uuid).execute( num_retries=self.num_retries) # do this in 2 steps until #17424 is fixed contents = arvados.util.list_all( self.api.groups().contents, self.num_retries, uuid=self.project_uuid, filters=[["uuid", "is_a", "arvados#group"], ["group_class", "=", "project"]]) contents.extend( arvados.util.list_all( self.api.groups().contents, self.num_retries, uuid=self.project_uuid, filters=[["uuid", "is_a", "arvados#collection"]])) # end with llfuse.lock_released, re-acquire lock self.merge(contents, self.namefn, samefn, self.createDirectory) return True finally: self._updating_lock.release()
def update(self): if self.project_object_file == None: self.project_object_file = ObjectFile(self.inode, self.project_object) self.inodes.add_entry(self.project_object_file) if not self._full_listing: return True def samefn(a, i): if isinstance(a, CollectionDirectory) or isinstance(a, ProjectDirectory): return a.uuid() == i['uuid'] elif isinstance(a, ObjectFile): return a.uuid() == i['uuid'] and not a.stale() return False try: with llfuse.lock_released: self._updating_lock.acquire() if not self.stale(): return if group_uuid_pattern.match(self.project_uuid): self.project_object = self.api.groups().get( uuid=self.project_uuid).execute(num_retries=self.num_retries) elif user_uuid_pattern.match(self.project_uuid): self.project_object = self.api.users().get( uuid=self.project_uuid).execute(num_retries=self.num_retries) contents = arvados.util.list_all(self.api.groups().list, self.num_retries, filters=[["owner_uuid", "=", self.project_uuid], ["group_class", "=", "project"]]) contents.extend(arvados.util.list_all(self.api.collections().list, self.num_retries, filters=[["owner_uuid", "=", self.project_uuid]])) # end with llfuse.lock_released, re-acquire lock self.merge(contents, self.namefn, samefn, self.createDirectory) return True finally: self._updating_lock.release()