X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f69d2824c997c53caa11d30ba816768bad52e12b..017d19d31606b8b313c04fffc33d44592ad9644b:/services/fuse/arvados_fuse/fusefile.py diff --git a/services/fuse/arvados_fuse/fusefile.py b/services/fuse/arvados_fuse/fusefile.py index d3c13f3a16..4d472cff1c 100644 --- a/services/fuse/arvados_fuse/fusefile.py +++ b/services/fuse/arvados_fuse/fusefile.py @@ -1,6 +1,7 @@ import logging import re import json +import llfuse from fresh import FreshBase, convertTime @@ -36,6 +37,7 @@ class File(FreshBase): def flush(self): pass + class FuseArvadosFile(File): """Wraps a ArvadosFile.""" @@ -44,13 +46,16 @@ class FuseArvadosFile(File): self.arvfile = arvfile def size(self): - return self.arvfile.size() + with llfuse.lock_released: + return self.arvfile.size() def readfrom(self, off, size, num_retries=0): - return self.arvfile.readfrom(off, size, num_retries, exact=True) + with llfuse.lock_released: + return self.arvfile.readfrom(off, size, num_retries, exact=True) def writeto(self, off, buf, num_retries=0): - return self.arvfile.writeto(off, buf, num_retries) + with llfuse.lock_released: + return self.arvfile.writeto(off, buf, num_retries) def stale(self): return False @@ -59,8 +64,9 @@ class FuseArvadosFile(File): return self.arvfile.writable() def flush(self): - if self.writable(): - self.arvfile.parent.root_collection().save() + with llfuse.lock_released: + if self.writable(): + self.arvfile.parent.root_collection().save() class StringFile(File): @@ -81,9 +87,15 @@ class ObjectFile(StringFile): def __init__(self, parent_inode, obj): super(ObjectFile, self).__init__(parent_inode, "", 0) - self.uuid = obj['uuid'] + self.object_uuid = obj['uuid'] self.update(obj) - def update(self, obj): + def uuid(self): + return self.object_uuid + + def update(self, obj=None): self._mtime = convertTime(obj['modified_at']) if 'modified_at' in obj else 0 self.contents = json.dumps(obj, indent=4, sort_keys=True) + "\n" + + def persisted(self): + return True