Permettre à recuperer_url_cache de seulement invalider un cache #4848

Open
opened 2 weeks ago by JLuc · 3 comments
JLuc commented 2 weeks ago

Avec recuperer_url_cache actuellement on peut forcer le raffraichissement d'un cache d'url en passant l'option delai_cache=0. Il serait bien de pouvoir simplement invalider un cache, sans raffraichir son contenu et donc sans appeler recuperer_url.

Ça pourrait se faire quand la fonction reçoit une option delai_cache == -1, auquel cas elle appelerait supprimer_fichier sur le fichier de cache.

Il suffit donc d'ajouter le code suivant :

if ($is_cached
    and ($options['delai_cache']== -1)) {
    return supprimer_fichier($cache);
}
else

avant le if ($is_cached and (filemtime($cache) > $_SERVER['REQUEST_TIME'] - $options['delai_cache'])...

Je suppose qu'on peut laisser la valeur par défaut $lock = true pour le supprimer_fichier ?

Si c'est OK je proposerai une PR.

Avec [recuperer_url_cache](https://git.spip.net/spip/spip/src/branch/master/ecrire/inc/distant.php#L596) actuellement on peut forcer le raffraichissement d'un cache d'url en passant l'option `delai_cache`=0. Il serait bien de pouvoir simplement invalider un cache, sans raffraichir son contenu et donc sans appeler recuperer_url. Ça pourrait se faire quand la fonction reçoit une option `delai_cache` == -1, auquel cas elle appelerait `supprimer_fichier` sur le fichier de cache. Il suffit donc d'ajouter le code suivant : ``` if ($is_cached and ($options['delai_cache']== -1)) { return supprimer_fichier($cache); } else ``` avant le [`if ($is_cached and (filemtime($cache) > $_SERVER['REQUEST_TIME'] - $options['delai_cache'])...` ](https://git.spip.net/spip/spip/src/branch/master/ecrire/inc/distant.php#L651) Je suppose qu'on peut laisser la valeur par défaut `$lock = true` pour le `supprimer_fichier` ? Si c'est OK je proposerai une PR.
Poster

Il y a 2 intérêts à pouvoir invalider un cache d'url distante

  • parfois le moment où on apprend qu'une ressource est périmée n'est pas corrélé au moment où on a besoin de cette ressource. Je préfère que le site passe du temps à aller chercher une ressource distant au moment où il en a besoin, si jamais il arrive qu'à un moment il en a besoin, plutôt qu'au moment où on apprend que sa valeur connue n'est plus bonne (mais qu'on en a pas besoin).
  • il me semble que le cache des url distantes fait partie des trucs qui s'accumulent sur un site SPIP, qui ne sont jamais vidés et qui potentiellement peuvent exploser. Donc ne serait ce que par hygiène, permettre d'invalider une ressource, ce qui se traduit là par l'effacement du fichier cache, peut contribuer à éviter une explosion de l'espace de cache des urls distantes.

On peut aussi effacer tout le dossier cache mais pourquoi effacer tous les autres caches alors qu'on ne veut en invalider qu'un seul ?
Le patch proposé est très simple.

Il y a 2 intérêts à pouvoir invalider un cache d'url distante - parfois le moment où on apprend qu'une ressource est périmée n'est pas corrélé au moment où on a besoin de cette ressource. Je préfère que le site passe du temps à aller chercher une ressource distant au moment où il en a besoin, si jamais il arrive qu'à un moment il en a besoin, plutôt qu'au moment où on apprend que sa valeur connue n'est plus bonne (mais qu'on en a pas besoin). - il me semble que le cache des url distantes fait partie des trucs qui s'accumulent sur un site SPIP, qui ne sont jamais vidés et qui potentiellement peuvent exploser. Donc ne serait ce que par hygiène, permettre d'invalider une ressource, ce qui se traduit là par l'effacement du fichier cache, peut contribuer à éviter une explosion de l'espace de cache des urls distantes. On peut aussi effacer tout le dossier cache mais pourquoi effacer tous les autres caches alors qu'on ne veut en invalider qu'un seul ? Le patch proposé est très simple.
JLuc changed title from Permettre à recuperer_url_cache de simplement invalider un cache to Permettre à recuperer_url_cache de seulement invalider un cache 2 weeks ago
Poster

Eventuellement, à la place d'un delai_cache égal à -1, on peut se servir d'une nouvelle entrée invalider_seulement de $options.

if ($is_cached
    and ($options['invalider_seulement'] ?? false)) {
    return supprimer_fichier($cache);
}
else ...
Eventuellement, à la place d'un `delai_cache` égal à -1, on peut se servir d'une nouvelle entrée `invalider_seulement` de $options. ``` if ($is_cached and ($options['invalider_seulement'] ?? false)) { return supprimer_fichier($cache); } else ... ```
Poster

J'ai contourné ce besoin et n'ai pas besoin de cette amélioration, mais la demande reste valable pour l'intérêt général, car mettre en cache, raffraîchir et invalider sont les 3 mamelles de la gestion d'un cache sain.

J'ai contourné ce besoin et n'ai pas besoin de cette amélioration, mais la demande reste valable pour l'intérêt général, car mettre en cache, raffraîchir et invalider sont les 3 mamelles de la gestion d'un cache sain.
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.