X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/a592559241a69087a35361177d9aa81c8a2c3e79..017d19d31606b8b313c04fffc33d44592ad9644b:/services/fuse/arvados_fuse/fusefile.py?ds=sidebyside diff --git a/services/fuse/arvados_fuse/fusefile.py b/services/fuse/arvados_fuse/fusefile.py index 846e043c79..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): @@ -87,6 +93,9 @@ class ObjectFile(StringFile): def uuid(self): return self.object_uuid - def update(self, obj): + 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