Move llfuse.lock_released down one level into individual fusefile and fusedir methods.
Add big_writes option, improves write speed by 2x!
from .retry import retry_method
MOD = "mod"
+WRITE = "write"
_logger = logging.getLogger('arvados.arvfile')
for k,v in items:
# flush again with wait=True to remove committed bufferblocks from
# the segments.
- v.owner.flush(True)
+ if v.owner:
+ v.owner.flush(True)
def block_prefetch(self, locator):
replace_range(self._segments, offset, len(data), self._current_bblock.blockid, self._current_bblock.write_pointer - len(data))
- self.parent.notify(MOD, self.parent, self.name, (self, self))
+ self.parent.notify(WRITE, self.parent, self.name, (self, self))
return len(data)
for s in to_delete:
self.parent._my_block_manager().delete_bufferblock(s)
- self.parent.notify(MOD, self.parent, self.name, (self, self))
@must_be_writable
@synchronized
self.inodes.touch(handle.obj)
try:
- with llfuse.lock_released:
- return handle.obj.readfrom(off, size, self.num_retries)
+ return handle.obj.readfrom(off, size, self.num_retries)
except arvados.errors.NotFoundError as e:
- _logger.warning("Block not found: " + str(e))
+ _logger.error("Block not found: " + str(e))
raise llfuse.FUSEError(errno.EIO)
@catch_exceptions
self.inodes.touch(handle.obj)
- with llfuse.lock_released:
- return handle.obj.writeto(off, buf, self.num_retries)
+ return handle.obj.writeto(off, buf, self.num_retries)
@catch_exceptions
def release(self, fh):
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
opts = [optname for optname in ['allow_other', 'debug']
if getattr(args, optname)]
+ opts += ["big_writes", "max_read=131072"]
+
if args.exec_args:
# Initialize the fuse connection
llfuse.init(operations, args.mountpoint, opts)