X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/682dd5b6cc23a455766a7651e3e841257660b31c..fea4d2ba4ab741daff3fd17d910b72539a50a447:/services/fuse/arvados_fuse/fusefile.py diff --git a/services/fuse/arvados_fuse/fusefile.py b/services/fuse/arvados_fuse/fusefile.py index d3c13f3a16..d09b1f007c 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 @@ -47,10 +48,12 @@ class FuseArvadosFile(File): 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 +62,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 +85,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