appliquer_quota_cache ne fait pas son job

arnaud cordier <[email protected]>
Newsgroups gmane.comp.web.spip.devel
Message-ID <[email protected]>
Bonjour,

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.

Merci,
ArnAud.
appliquer_quota_cache.patch (text/x-patch, 2.6 KB)
diff --git a/ecrire/inc/genie.php b/ecrire/inc/genie.php
index 3a72e8c..6269b80 100644
--- a/ecrire/inc/genie.php
+++ b/ecrire/inc/genie.php
@@ -117,7 +117,7 @@ function taches_generales($taches_generales = array()) {
 	// Optimisation de la base
 	$taches_generales['optimiser'] = 3600 * 48;
 
-	// cache (chaque 10 minutes => 1/16eme du repertoire cache,
+	// cache (chaque 10 minutes => 1/256eme du repertoire cache,
 	// soit toutes les 2h40 sur le meme rep)
 	$taches_generales['invalideur'] = 600;
 
diff --git a/ecrire/inc/invalideur.php b/ecrire/inc/invalideur.php
index fb9d0f5..42edf14 100644
--- a/ecrire/inc/invalideur.php
+++ b/ecrire/inc/invalideur.php
@@ -225,7 +225,7 @@ function purger_repertoire($dir, $options = array()) {
 
 //
 // Methode : on prend un des sous-repertoires de CACHE/
-// on considere qu'il fait 1/16e de la taille du cache
+// on considere qu'il fait 1/256e de la taille du cache
 // et on le ratiboise en supprimant les fichiers qui n'ont pas
 // ete sollicites dans l'heure qui vient de s'ecouler
 //
@@ -234,21 +234,21 @@ function appliquer_quota_cache() {
 
 	$encore = false;
 
-	$tour_quota_cache = intval(1 + $GLOBALS['meta']['tour_quota_cache']) % 16;
+	$tour_quota_cache = intval(1 + $GLOBALS['meta']['tour_quota_cache']) % 256;
 	ecrire_meta('tour_quota_cache', $tour_quota_cache);
 
-	$l = dechex($tour_quota_cache);
+	$l = sprintf("%02s", dechex($tour_quota_cache));
 	$dir = sous_repertoire(_DIR_CACHE, $l);
 	list($nombre, $taille) = nombre_de_fichiers_repertoire($dir);
 	$total_cache = $taille * $nombre;
 	spip_log("Taille du CACHE estimee ($l): "
-		. (intval(16 * $total_cache / (1024 * 1024 / 10)) / 10) . ' Mo', 'invalideur');
+		. (intval(256 * $total_cache / (1024 * 1024 / 10)) / 10) . ' Mo', 'invalideur');
 
 	// Nombre max de fichiers a supprimer
 	if ($GLOBALS['quota_cache'] > 0
 		and $taille > 0
 	) {
-		$trop = $total_cache - ($GLOBALS['quota_cache'] / 16) * 1024 * 1024;
+		$trop = $total_cache - ($GLOBALS['quota_cache'] / 256) * 1024 * 1024;
 		$trop = 3 * intval($trop / $taille);
 		if ($trop > 0) {
 			$n = purger_repertoire(
@@ -260,7 +260,7 @@ function appliquer_quota_cache() {
 				)
 			);
 			spip_log("$dir : $n/$trop caches supprimes [taille moyenne $taille]", 'invalideur');
-			$total_cache = intval(max(0, (16 * $total_cache) - $n * $taille) / (1024 * 1024) * 10) / 10;
+			$total_cache = intval(max(0, (256 * $total_cache) - $n * $taille) / (1024 * 1024) * 10) / 10;
 			spip_log("cache restant estime : $total_cache Mo, ratio " . $total_cache / $GLOBALS['quota_cache'], 'invalideur');
 
 			// redemander la main pour eviter que le cache ne gonfle trop
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.