+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
"""FUSE driver for Arvados Keep
Architecture:
# llfuse >= 0.42
llfuse._notify_queue = Queue.Queue()
+LLFUSE_VERSION_0 = llfuse.__version__.startswith('0')
+
from fusedir import sanitize_filename, Directory, CollectionDirectory, TmpCollectionDirectory, MagicDirectory, TagsDirectory, ProjectDirectory, SharedDirectory, CollectionDirectoryBase
from fusefile import StringFile, FuseArvadosFile
self.obj.dec_use()
def flush(self):
- if self.obj.writable():
- return self.obj.flush()
+ pass
class FileHandle(Handle):
"""Connects a numeric file handle to a File object that has
been opened by the client."""
- pass
+
+ def flush(self):
+ if self.obj.writable():
+ return self.obj.flush()
class DirectoryHandle(Handle):
self.events.close()
self.events = None
- if llfuse.lock.acquire():
+ # Different versions of llfuse require and forbid us to
+ # acquire the lock here. See #8345#note-37, #10805#note-9.
+ if LLFUSE_VERSION_0 and llfuse.lock.acquire():
# llfuse < 0.42
self.inodes.clear()
llfuse.lock.release()
@catch_exceptions
def release(self, fh):
if fh in self._filehandles:
+ _logger.debug("arv-mount release fh %i", fh)
try:
self._filehandles[fh].flush()
except Exception: