Project

General

Profile

Bug #37563

Le cache des sources de donnée devraient rafrâichi plus souvent que sa période de stockage

Added by Benjamin Dauvergne 5 months ago.

Status:
Nouveau
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
09 Nov 2019
Due date:
% Done:

0%

Patch proposed:
No
Planning:
No

Description

Lié à la demande #37127, mais c'est une idée un peu générale quand on fait du cache; pour pallier à des absences temporaires du système distant il faudrait que le cache soit rafraîchi assez régulièrement même si la durée de celui-ci est longue.

Pour l'exemple de la demande #37127, on a une durée de deux jours, mais il serait plus judicieux de permettre au moins un appel toutes les heures; en fait il faudrait que le cache ait une durée quasi illimitée qu'on ne spécifierait pas (disons quelques jours) mais qu'on interprète plutôt la durée du cache par une durée minimum entre les rafraîchissements forcées, si ceux-ci échoue on renvoie alors la donnée en cache. En pseudocode :

   get_datasource_value_with_cache(ds):
       refresh_time = ...
       storage_time = ...
       try:
            value, last_time = get_cache(ds)
            if now - last_time < refresh_time:
                return value
       except CacheNotFound:
            value = None
            last_time = now
       try:
            value = get_datasource_value(ds)
       except DatasourceError as e:
            if value is not Now:
               set_cache(ds, (value, last_time + 5 minutes), expire=now + storage_time)  # prevent hammering ds when it becomes down and refresh duration has expired
               return value
            raise e  # cache is empty, raise initial error
       else:
            set_cache(ds, (value, now), expire=now + storage_time)
            return value

Also available in: Atom PDF