Skip to content
Extraits de code Groupes Projets
Valider f545c318 rédigé par Fil's avatar Fil
Parcourir les fichiers

suppression du mecanisme de fichier .NEW ; les invalideurs de taille et durée...

suppression du mecanisme de fichier .NEW ; les invalideurs de taille et durée suffisent à maintenir le CACHE à une taille raisonnable même face à des robots fous
parent bb4b7d6a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -75,14 +75,11 @@ function generer_nom_fichier_cache($contexte='', $fond='') { ...@@ -75,14 +75,11 @@ function generer_nom_fichier_cache($contexte='', $fond='') {
// Securite : est sur que c'est un cache // Securite : est sur que c'est un cache
function retire_cache($cache) { function retire_cache($cache) {
if ($GLOBALS['flag_ecrire']) return; if ($GLOBALS['flag_ecrire']) return;
# spip_log("kill $cache ?");
if (preg_match('|^' . _DIR_CACHE . if (preg_match('|^' . _DIR_CACHE .
"([0-9a-f]/)?([0-9]+/)?[^.][\-_\%0-9a-z]+\.[0-9a-f]+(\.gz)?$|i", "([0-9a-f]/)?([0-9]+/)?[^.][\-_\%0-9a-z]+\.[0-9a-f]+(\.gz)?$|i",
$cache)) { $cache)) {
// supprimer le fichier (de facon propre) // supprimer le fichier (de facon propre)
supprimer_fichier($cache); supprimer_fichier($cache);
// et le fichier compagnon s'il existe
@unlink($cache.'.NEW');
} else } else
spip_log("Impossible de retirer $cache"); spip_log("Impossible de retirer $cache");
} }
......
...@@ -19,8 +19,8 @@ function obtenir_page ($contexte, $chemin_cache, $delais, $use_cache, $fond, $in ...@@ -19,8 +19,8 @@ function obtenir_page ($contexte, $chemin_cache, $delais, $use_cache, $fond, $in
spip_timer('calculer_page'); spip_timer('calculer_page');
$page = calculer_page($chemin_cache, $page = calculer_page($chemin_cache,
array('fond' => $fond, array('fond' => $fond,
'contexte' => $contexte), 'contexte' => $contexte),
$delais, $delais,
$inclusion); $inclusion);
...@@ -32,49 +32,26 @@ function obtenir_page ($contexte, $chemin_cache, $delais, $use_cache, $fond, $in ...@@ -32,49 +32,26 @@ function obtenir_page ($contexte, $chemin_cache, $delais, $use_cache, $fond, $in
spip_log (($inclusion ? 'calcul inclus':'calcul').' (' spip_log (($inclusion ? 'calcul inclus':'calcul').' ('
.spip_timer('calculer_page')."): $log"); .spip_timer('calculer_page')."): $log");
// on vient d'ecrire le cache : creer un .NEW fantome qui indique // Nouveau cache : creer un invalideur 't' fixant la date
// qu'il faut changer d'invalideur a la prochaine lecture et donner // d'expiration et la taille du fichier
// un invalideur 't' dans 1 heure
// NB: cet invalideur connait aussi la taille du fichier
if (@file_exists($chemin_cache)) { if (@file_exists($chemin_cache)) {
// Ici on ajoute 3600s pour eviter toute concurrence
$bedtime = time() + 3600; // entre un invalideur et un appel public de page
$bedtime = time() + $delais + 3600;
$taille = @filesize($chemin_cache); $taille = @filesize($chemin_cache);
$fichier = addslashes($chemin_cache); $fichier = addslashes($chemin_cache);
spip_query("INSERT IGNORE INTO spip_caches (fichier,id,type,taille) spip_query("INSERT IGNORE INTO spip_caches (fichier,id,type,taille)
VALUES ('$fichier','$bedtime','t','$taille')"); VALUES ('$fichier','$bedtime','t','$taille')");
@touch($chemin_cache.'.NEW');
} }
} else { } else {
// Le fichier compagnon NEW existe => ce cache est utilise
// pour la premiere fois : on change alors d'invalideur 't'
// pour le rendre plus perenne
if (@file_exists($chemin_cache.'.NEW')) {
spip_log ("premier acces: $chemin_cache (.NEW)");
// Attention ne pas mettre time()+$delais mais quelque chose
// de plus grand, sinon il y a risque de concurrence entre
// l'invalideur et un appel public de page ; plus on en ajoute
// et plus le cache est gros, mais plus il procure de resistance
// aux pannes, car le cache contiendra les pages calculees
// il y a moins de $conservation secondes.
// L'invalideur initial avait pour date time()+3600 : cf.
$conservation = 3600 * 12; // intval(sqrt(3600*12*$delais)) ?
$bedtime = time() + $delais + $conservation;
$fichier = addslashes($chemin_cache);
spip_query("UPDATE spip_caches SET id='$bedtime'
WHERE fichier='$chemin_cache' AND type='t'");
if ($GLOBALS['db_ok'])
@unlink($chemin_cache.'.NEW');
}
// //
// Lire le fichier cache // Lire le fichier cache
// //
lire_fichier ($chemin_cache, $page['texte']); lire_fichier ($chemin_cache, $page['texte']);
$lastmodified = max($lastmodified, @filemtime($chemin_cache)); $lastmodified = max($lastmodified, @filemtime($chemin_cache));
# spip_log ("cache $chemin_cache $lasmodified"); # spip_log ("cache $chemin_cache $lastmodified");
// //
// Lire sa carte d'identite & fixer le contexte global // Lire sa carte d'identite & fixer le contexte global
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter