# appear as underscores in the fuse mount.)
_disallowed_filename_characters = re.compile('[\x00/]')
+# '.' and '..' are not reachable if API server is newer than #6277
def sanitize_filename(dirty):
"""Replace disallowed filename characters with harmless "_"."""
if dirty is None:
name = sanitize_filename(name)
_logger.debug("collection notify %s %s %s %s", event, collection, name, item)
with llfuse.lock:
- _logger.debug("on_event got llfuse.lock %s %s %s", event, collection, name)
if event == arvados.collection.ADD:
self.new_entry(name, item, self.mtime())
elif event == arvados.collection.DEL:
- _logger.debug("on_event (1) %s %s %s", event, collection, name)
ent = self._entries[name]
- _logger.debug("on_event (2) %s %s %s", event, collection, name)
del self._entries[name]
-
- _logger.debug("on_event (3) %s %s %s", event, collection, name)
-
self.inodes.invalidate_entry(self.inode, name.encode(self.inodes.encoding))
-
- _logger.debug("on_event (4) %s %s %s", event, collection, name)
-
self.inodes.del_entry(ent)
-
- _logger.debug("on_event (5) %s %s %s", event, collection, name)
elif event == arvados.collection.MOD:
if hasattr(item, "fuse_entry") and item.fuse_entry is not None:
self.inodes.invalidate_inode(item.fuse_entry.inode)
elif name in self._entries:
self.inodes.invalidate_inode(self._entries[name].inode)
- _logger.debug("on_event completed %s %s %s", event, collection, name)
def populate(self, mtime):
self._mtime = mtime
return True
finally:
self._updating_lock.release()
- except arvados.errors.NotFoundError:
- _logger.exception("arv-mount %s: error", self.collection_locator)
+ except arvados.errors.NotFoundError as e:
+ _logger.error("Error fetching collection '%s': %s", self.collection_locator, e)
except arvados.errors.ArgumentError as detail:
_logger.warning("arv-mount %s: error %s", self.collection_locator, detail)
if self.collection_record is not None and "manifest_text" in self.collection_record:
self.inode, self.inodes, self.api, self.num_retries, k))
if e.update():
- self._entries[k] = e
+ if k not in self._entries:
+ self._entries[k] = e
+ else:
+ self.inodes.del_entry(e)
return True
else:
+ self.inodes.del_entry(e)
return False
except Exception as e:
_logger.debug('arv-mount exception keep %s', e)
+ self.inodes.del_entry(e)
return False
def __getitem__(self, item):