Merge branch 'master' into 6588-split-manage-account
[arvados.git] / services / fuse / arvados_fuse / fusefile.py
index 846e043c79c49f681451d201a99b6ea7e15eba67..4d472cff1cca38380d80afa63b9783027ad1db30 100644 (file)
@@ -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