+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
import json
import llfuse
import logging
class File(FreshBase):
"""Base for file objects."""
+ __slots__ = ("inode", "parent_inode", "_mtime")
+
def __init__(self, parent_inode, _mtime=0):
super(File, self).__init__()
self.inode = None
def mtime(self):
return self._mtime
- def clear(self, force=False):
- return True
+ def clear(self):
+ pass
def writable(self):
return False
class FuseArvadosFile(File):
"""Wraps a ArvadosFile."""
+ __slots__ = ('arvfile',)
+
def __init__(self, parent_inode, arvfile, _mtime):
super(FuseArvadosFile, self).__init__(parent_inode, _mtime)
self.arvfile = arvfile
return self.object_uuid
def update(self, obj=None):
+ if obj is None:
+ # TODO: retrieve the current record for self.object_uuid
+ # from the server. For now, at least don't crash when
+ # someone tells us it's a good time to update but doesn't
+ # pass us a fresh obj. See #8345
+ return
self._mtime = convertTime(obj['modified_at']) if 'modified_at' in obj else 0
self.contents = json.dumps(obj, indent=4, sort_keys=True) + "\n"
super(FuncToJSONFile, self).__init__(parent_inode, "", 0)
self.func = func
- # invalidate_inode() and invalidate_entry() are asynchronous
- # with no callback to wait for. In order to guarantee
- # userspace programs don't get stale data that was generated
- # before the last invalidate(), we must disallow dirent
+ # invalidate_inode() is asynchronous with no callback to wait for. In
+ # order to guarantee userspace programs don't get stale data that was
+ # generated before the last invalidate(), we must disallow inode
# caching entirely.
- self.allow_dirent_cache = False
+ self.allow_attr_cache = False
def size(self):
self._update()