X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/6264e41963708efbc19d94a0a4f53e0d53dcb7ad..fa8c5cdb36fa89af92087d6465b207d65ffc9618:/services/fuse/arvados_fuse/fusefile.py diff --git a/services/fuse/arvados_fuse/fusefile.py b/services/fuse/arvados_fuse/fusefile.py index d4c075a40d..81fcd405ad 100644 --- a/services/fuse/arvados_fuse/fusefile.py +++ b/services/fuse/arvados_fuse/fusefile.py @@ -29,8 +29,8 @@ class File(FreshBase): def mtime(self): return self._mtime - def clear(self, force=False): - return True + def clear(self): + pass def writable(self): return False @@ -95,6 +95,12 @@ class ObjectFile(StringFile): 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" @@ -112,6 +118,13 @@ class FuncToJSONFile(StringFile): 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 + # caching entirely. + self.allow_dirent_cache = False + def size(self): self._update() return super(FuncToJSONFile, self).size()