projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' into 6588-split-manage-account
[arvados.git]
/
services
/
fuse
/
arvados_fuse
/
fusefile.py
diff --git
a/services/fuse/arvados_fuse/fusefile.py
b/services/fuse/arvados_fuse/fusefile.py
index 9af341f231337ed0732a3419784e88f676a9c032..4d472cff1cca38380d80afa63b9783027ad1db30 100644
(file)
--- 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 logging
import re
import json
+import llfuse
from fresh import FreshBase, convertTime
from fresh import FreshBase, convertTime
@@
-21,12
+22,21
@@
class File(FreshBase):
def readfrom(self, off, size, num_retries=0):
return ''
def readfrom(self, off, size, num_retries=0):
return ''
+ def writeto(self, off, size, num_retries=0):
+ raise Exception("Not writable")
+
def mtime(self):
return self._mtime
def clear(self, force=False):
return True
def mtime(self):
return self._mtime
def clear(self, force=False):
return True
+ def writable(self):
+ return False
+
+ def flush(self):
+ pass
+
class FuseArvadosFile(File):
"""Wraps a ArvadosFile."""
class FuseArvadosFile(File):
"""Wraps a ArvadosFile."""
@@
-36,14
+46,28
@@
class FuseArvadosFile(File):
self.arvfile = arvfile
def size(self):
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):
def readfrom(self, off, size, num_retries=0):
- return self.arvfile.readfrom(off, size, num_retries)
+ with llfuse.lock_released:
+ return self.arvfile.readfrom(off, size, num_retries, exact=True)
+
+ def writeto(self, off, buf, num_retries=0):
+ with llfuse.lock_released:
+ return self.arvfile.writeto(off, buf, num_retries)
def stale(self):
return False
def stale(self):
return False
+ def writable(self):
+ return self.arvfile.writable()
+
+ def flush(self):
+ with llfuse.lock_released:
+ if self.writable():
+ self.arvfile.parent.root_collection().save()
+
class StringFile(File):
"""Wrap a simple string as a file"""
class StringFile(File):
"""Wrap a simple string as a file"""
@@
-63,9
+87,15
@@
class ObjectFile(StringFile):
def __init__(self, parent_inode, obj):
super(ObjectFile, self).__init__(parent_inode, "", 0)
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)
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"
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