Bug du cache fichier si il y a trop de fichiers dans le cache

Contexte :
Dans cache.class.php la fonction persist() de la classe FileCache fait un tar cfz ' . __DIR__ . '/../../cache.tar.gz * 2>&1 > /dev/null;

Pourquoi c’est problématique ?
Le * est interprété par le shell, pas par tar. Le shell remplace * par tous les fichiers non cachés du répertoire, un par un. Cela peut produire une liste énorme d’arguments, parfois trop grande pour la limite du shell. Pour ma part, avec 22000 fichiers dans mon répertoire cache, mon cache n’était jamais persisté et la page santé de mon jeedom me disait que le cache était en erreur.

Comment corriger ?
Il suffit dans la commande de remplacer le * par un . : tar cfz ' . __DIR__ . '/../../cache.tar.gz . 2>&1 > /dev/null;
Cela permet d’archiver le répertoire courant lui‑même, avec tous ses fichiers et sous‑répertoires, sans dépendre du shell pour l’expansion.
→ comportement identique
→ meilleures performances
→ plus fiable (pas de limite sur le nombre de fichiers, reproductibilité, pas de soucis avec certains noms de fichiers)

2 « J'aime »

Hello,

Tu peux peut-être proposer un PR :

Bad

Je ne suis pas certain d’avoir fait les choses dans les règles

6 messages ont été scindés en un nouveau sujet : 6 appels de la fonction system::getCmdSudo()

Il faudra probablement faire la PR sur une autre branche que alpha qui va être, je pense, abandonnée.

ca aurait dû être la branche Release 4.5.2 · jeedom/core · GitHub je crois mais entre temps il y a eu des commits en direct sur master et la branche 4.5.2 est une future 4.5.3 à mon avis donc il y a du nettoyage à faire avant