memory(cache): extend EOL when a file metadata is retrieved
This commit is contained in:
parent
f71b40f86f
commit
48c56ee57e
1 changed files with 24 additions and 12 deletions
|
|
@ -111,12 +111,15 @@ class Cache(object):
|
|||
raise exceptions.DataError("Invalid char found")
|
||||
return self.cache_dir / filename
|
||||
|
||||
def getMetadata(self, uid):
|
||||
def getMetadata(self, uid, update_eol=True):
|
||||
"""Retrieve metadata for cached data
|
||||
|
||||
@param uid(unicode): unique identifier of file
|
||||
@param update_eol(bool): True if eol must extended
|
||||
if True, max_age will be added to eol (only if it is not already expired)
|
||||
@return (dict, None): metadata with following keys:
|
||||
see [cacheData] for data details, an additional "path" key is the full path to cached file.
|
||||
see [cacheData] for data details, an additional "path" key is the full path to
|
||||
cached file.
|
||||
None if file is not in cache (or cache is invalid)
|
||||
"""
|
||||
|
||||
|
|
@ -124,17 +127,17 @@ class Cache(object):
|
|||
if not uid:
|
||||
raise exceptions.InternalError("uid must not be empty")
|
||||
cache_url = self.getPath(uid)
|
||||
if not cache_url.exists:
|
||||
if not cache_url.exists():
|
||||
return None
|
||||
|
||||
try:
|
||||
with cache_url.open("rb") as f:
|
||||
cache_data = pickle.load(f)
|
||||
except IOError:
|
||||
log.warning("can't read cache at {}".format(cache_url))
|
||||
except IOError as e:
|
||||
log.warning(f"can't read cache at {cache_url}: {e}")
|
||||
return None
|
||||
except pickle.UnpicklingError:
|
||||
log.warning("invalid cache found at {}".format(cache_url))
|
||||
log.warning(f"invalid cache found at {cache_url}")
|
||||
return None
|
||||
|
||||
try:
|
||||
|
|
@ -148,6 +151,16 @@ class Cache(object):
|
|||
)
|
||||
return None
|
||||
|
||||
if update_eol:
|
||||
try:
|
||||
max_age = cache_data["max_age"]
|
||||
except KeyError:
|
||||
log.warning(f"no max_age found for cache at {cache_url}, using default")
|
||||
max_age = cache_data["max_age"] = C.DEFAULT_MAX_AGE
|
||||
cache_data["eol"] = int(time.time()) + max_age
|
||||
with cache_url.open("wb") as f:
|
||||
pickle.dump(cache_data, f, protocol=2)
|
||||
|
||||
cache_data["path"] = self.getPath(cache_data["filename"])
|
||||
return cache_data
|
||||
|
||||
|
|
@ -199,6 +212,8 @@ class Cache(object):
|
|||
"source": source,
|
||||
"filename": filename,
|
||||
"eol": int(time.time()) + max_age,
|
||||
# we also store max_age for updating eol
|
||||
"max_age": max_age,
|
||||
"mime_type": mime_type,
|
||||
}
|
||||
file_path = self.getPath(filename)
|
||||
|
|
|
|||
Loading…
Reference in a new issue