X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/900b548097c68649ae2874ded5849f1d8164384c..f42c7e3d3344104206ca0b8669e2b07a6b30388e:/services/fuse/arvados_fuse/fusedir.py diff --git a/services/fuse/arvados_fuse/fusedir.py b/services/fuse/arvados_fuse/fusedir.py index 85f4bca833..16b3bb2cdb 100644 --- a/services/fuse/arvados_fuse/fusedir.py +++ b/services/fuse/arvados_fuse/fusedir.py @@ -143,13 +143,13 @@ class Directory(FreshBase): # delete any other directory entries that were not in found in 'items' for i in oldentries: - _logger.debug("Forgetting about entry '%s' on inode %i", str(i), self.inode) - llfuse.invalidate_entry(self.inode, str(i)) + _logger.debug("Forgetting about entry '%s' on inode %i", i, self.inode) + self.inodes.invalidate_entry(self.inode, i.encode(self.inodes.encoding)) self.inodes.del_entry(oldentries[i]) changed = True if changed: - llfuse.invalidate_inode(self.inode) + self.inodes.invalidate_inode(self.inode) self._mtime = time.time() self.fresh() @@ -165,9 +165,9 @@ class Directory(FreshBase): self._entries = oldentries return False for n in oldentries: - llfuse.invalidate_entry(self.inode, str(n)) + self.inodes.invalidate_entry(self.inode, n.encode(self.inodes.encoding)) self.inodes.del_entry(oldentries[n]) - llfuse.invalidate_inode(self.inode) + self.inodes.invalidate_inode(self.inode) self.invalidate() return True else: @@ -235,20 +235,21 @@ class CollectionDirectoryBase(Directory): def on_event(self, event, collection, name, item): if collection == self.collection: - _logger.debug("%s %s %s %s", event, collection, name, item) + name = sanitize_filename(name) + _logger.debug("collection notify %s %s %s %s", event, collection, name, item) with llfuse.lock: if event == arvados.collection.ADD: self.new_entry(name, item, self.mtime()) elif event == arvados.collection.DEL: ent = self._entries[name] del self._entries[name] - llfuse.invalidate_entry(self.inode, name) + self.inodes.invalidate_entry(self.inode, name.encode(self.inodes.encoding)) self.inodes.del_entry(ent) elif event == arvados.collection.MOD: if hasattr(item, "fuse_entry") and item.fuse_entry is not None: - llfuse.invalidate_inode(item.fuse_entry.inode) + self.inodes.invalidate_inode(item.fuse_entry.inode) elif name in self._entries: - llfuse.invalidate_inode(self._entries[name].inode) + self.inodes.invalidate_inode(self._entries[name].inode) def populate(self, mtime): self._mtime = mtime @@ -371,7 +372,7 @@ class CollectionDirectory(CollectionDirectoryBase): return self.collection_locator @use_counter - def update(self, to_pdh=None): + def update(self, to_record_version=None): try: if self.collection_record is not None and portable_data_hash_pattern.match(self.collection_locator): return True @@ -386,10 +387,10 @@ class CollectionDirectory(CollectionDirectoryBase): if not self.stale(): return - _logger.debug("Updating %s", self.collection_locator) - if self.collection: - if self.collection.portable_data_hash() == to_pdh: - _logger.debug("%s is fresh at pdh '%s'", self.collection_locator, to_pdh) + _logger.debug("Updating %s", to_record_version) + if self.collection is not None: + if self.collection.known_past_version(to_record_version): + _logger.debug("%s already processed %s", self.collection_locator, to_record_version) else: self.collection.update() else: @@ -465,6 +466,12 @@ class CollectionDirectory(CollectionDirectoryBase): # footprint directly would be more accurate, but also more complicated. return self._manifest_size * 128 + def finalize(self): + if self.collection is not None: + if self.writable(): + self.collection.save() + self.collection.stop_threads() + class MagicDirectory(Directory): """A special directory that logically contains the set of all extant keep locators. @@ -762,7 +769,7 @@ class ProjectDirectory(Directory): # Acually move the entry from source directory to this directory. del src._entries[name_old] self._entries[name_new] = ent - llfuse.invalidate_entry(src.inode, name_old) + self.inodes.invalidate_entry(src.inode, name_old.encode(self.inodes.encoding)) class SharedDirectory(Directory):