Skip to content

Conversation

@scanab
Copy link
Contributor

@scanab scanab commented Jan 8, 2026

Description

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)

Suggested changelog entry

Related issues/external references

Fixes #

Types of changes

  • Bug fix (non-breaking change which fixes)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
    • This change is only breaking for integrators, not for external standards or end-users.
  • Documentation improvement

PR checklist

TonioBDS and others added 5 commits December 15, 2025 10:39
Clarified the usage of the #trigger_name# tag and its implications for object, equipment, or command name changes.
Update #trigger_name# tag explanation in scenario.md
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)
@scanab scanab changed the title Update cache.class.php Correction bug FileCache Jan 8, 2026
@scanab scanab changed the title Correction bug FileCache Correction bug FileCache en cas de nombreux fichiers Jan 8, 2026
@zoic21 zoic21 changed the base branch from alpha to 4.5.3 January 9, 2026 13:43
Salvialf added a commit that referenced this pull request Jan 12, 2026
As same as #3184 without irrelevant documentation changes
@Salvialf
Copy link
Contributor

Merci @scanab,

Modification directement mise en place en 4.5.3 sans les autres changements qui se sont ajoutés automatiquement lorsque du rebase.

@Salvialf Salvialf closed this Jan 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants