Je m’intéresse à la fonction appliquer_quota_cache() de ecrire/inc/invalideur.php car je suis confronté à un cache qui ne fait qu'enfler sans jamais réduire.
Si je comprends bien comment ça marche, la fonction appliquer_quota_cache() est appelée toutes les dix minutes par le «genie» et la fonction genie_invalideur_dist()
Depuis la révision https://core.spip.net/projects/spip/repository/revisions/21067 le nombre de sous-dossier de cache dans le dossier tmp/cache/ est de 256 (00 à ff).
Mais appliquer_quota_cache() s'imagine que le nombre de sous-dossier est de 16.
Elle regarde, par exemple, dans tmp/cache/b/ (en le créant au passage), voit qu'il n'y a rien dedans, estime le cache à 0 et ne purge jamais rien.
Je joins un patch qui corrige ce problème en changeant simplement 16 par 256 dans cette fonction.
J'ai testé et le cache est bien purgé périodiquement.
Hum. Effectivement la fonction appliquer_quota_cache() n’a plus de raison d’être appelée maintenant (et comme tu as bien vu elle ne fait plus rien). Le cache devrait grossir jusqu’au nombre maximal de fichier atteint.
Je m’intéresse à la fonction appliquer_quota_cache() de ecrire/inc/invalideur.php car je suis confronté à un cache qui ne fait qu'enfler sans jamais réduire.
Hum. Effectivement la fonction appliquer_quota_cache() n’a plus de raison d’être appelée maintenant (et comme tu as bien vu elle ne fait plus rien). Le cache devrait grossir jusqu’au nombre maximal de fichier atteint.
Okay, du coup SPIP n'essaye plus de limiter le poids du cache, mais uniquement de limiter le nombre de fichiers: 16^4 en l’occurrence.
Mon problème est justement le nombre de fichiers: sur l'hébergement du site dont j'essaye de limiter le cache, l'hébergeur a posé une limite de 150000 fichiers (sic), ce qui est vite atteint avec deux spip sur le même hébergement. Et paf l'hébergeur bloque les sites !
Finalement j'ai appliqué une rustine :
dans public/cacher.php j'ai mis
function generer_nom_fichier_cache($contexte, $page) {
$u = md5(var_export(array($contexte, $page), true));
// limiter le nombre de fichiers cache à 14^4 = 38416
$u = base_convert($u, 16, 14);
Ouch ! Tant de fichiers en cache ? Il n’y a pas un problème derrière tout cela ?
Peut-être qu’il faudrait pouvoir régler ce type de paramétrage dans l’espace de gestion (surtout si le paramètre “taille limite du cache” ne signifie plus rien)
Il faudrait donc peut être supprimer la configuration et le message sur /ecrire/?exec=admin_vider, non ?
"SPIP essaie de limiter la taille du répertoire du cache de ce site à environ 10 Mo de données. (Ce paramètre est modifiable par le webmestre du site.)"