X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/0561bd0c3c07257fd58ded6c7cfa5feeae97af57..40241ad60283c3f34fb1157d063d23252a317e31:/services/fuse/arvados_fuse/fresh.py diff --git a/services/fuse/arvados_fuse/fresh.py b/services/fuse/arvados_fuse/fresh.py index 34295ef319..ff548f29ee 100644 --- a/services/fuse/arvados_fuse/fresh.py +++ b/services/fuse/arvados_fuse/fresh.py @@ -2,17 +2,17 @@ # # SPDX-License-Identifier: AGPL-3.0 -import time import ciso8601 import calendar import functools +import time def convertTime(t): """Parse Arvados timestamp to unix time.""" if not t: return 0 try: - return calendar.timegm(ciso8601.parse_datetime_unaware(t).timetuple()) + return calendar.timegm(ciso8601.parse_datetime_as_naive(t).timetuple()) except (TypeError, ValueError): return 0 @@ -59,6 +59,10 @@ class FreshBase(object): * Clear the object contents (invalidates the object) """ + + __slots__ = ("_stale", "_poll", "_last_update", "_atime", "_poll_time", "use_count", + "ref_count", "cache_size", "cache_uuid", "allow_attr_cache") + def __init__(self): self._stale = True self._poll = False @@ -67,11 +71,11 @@ class FreshBase(object): self._poll_time = 60 self.use_count = 0 self.ref_count = 0 - self.dead = False self.cache_size = 0 self.cache_uuid = None + + # Can the kernel cache attributes? self.allow_attr_cache = True - self.allow_dirent_cache = True def invalidate(self): """Indicate that object contents should be refreshed from source.""" @@ -119,17 +123,11 @@ class FreshBase(object): self.ref_count -= n return self.ref_count - def has_ref(self, only_children): + def has_ref(self): """Determine if there are any kernel references to this - object or its children. - - If only_children is True, ignore refcount of self and only consider - children. + object. """ - if only_children: - return False - else: - return self.ref_count > 0 + return self.ref_count > 0 def objsize(self): return 0 @@ -139,3 +137,16 @@ class FreshBase(object): def finalize(self): pass + + def child_event(self, ev): + pass + + def time_to_next_poll(self): + if self._poll: + t = (self._last_update + self._poll_time) - self._atime + if t < 0: + return 0 + else: + return t + else: + return self._poll_time