mayan.apps.file_caching — Gestion du cache de fichiers binaires (miniatures, rendus de pages, aperçus).
L'application File Caching fournit un système de cache générique pour stocker des fichiers dérivés coûteux à générer — principalement les miniatures et les rendus de pages de documents. Elle s'appuie sur le système de stockage pluggable de Mayan (DefinedStorage) et intègre un mécanisme d'éviction automatique basé sur la taille maximale configurée.
Le système est organisé en trois niveaux :
Cache (lié à un DefinedStorage, taille maximale configurable)
└── CachePartition (un objet métier = une partition, ex: un DocumentFile)
└── CachePartitionFile (un fichier dérivé, ex: page_1.png)
Chaque Cache est associé à un DefinedStorage nommé (ex : documents_cache, converter_cache). Il possède une taille maximale en octets au-delà de laquelle l'éviction automatique se déclenche.
Les caches sont visibles dans l'interface d'administration : Outils → Caches.
Chaque objet métier (un DocumentFile, un objet convertible) possède sa propre partition dans le cache. Le nom de partition est généralement l'identifiant de l'objet source.
Un fichier concret dans une partition. Chaque CachePartitionFile enregistre :
hits)Quand la taille totale du cache dépasse maximum_size, la méthode prune() supprime des fichiers dans l'ordre suivant :
hits ASC, puis datetime ASC (les fichiers les moins accédés et les plus anciens en premier)La suppression est protégée par le Lock Manager pour éviter les conditions de course en environnement multi-worker.
Chaque opération d'écriture ou de suppression de CachePartitionFile acquiert un verrou distribué via LockingBackend. Le nom du verrou est de la forme :
cache_partition-file-{cache_id}-{partition_id}-{filename}
Le context manager create_file() garantit qu'un seul worker écrit un fichier à la fois, et nettoie les entrées orphelines en cas d'exception.
| Tâche | Rôle |
|---|---|
task_cache_purge |
Vide entièrement un cache (toutes ses partitions) |
task_cache_partition_purge |
Vide une partition spécifique |
Les deux tâches sont retry automatiquement en cas de LockError.
| Événement | Déclencheur |
|---|---|
event_cache_created |
Création d'un nouveau Cache |
event_cache_edited |
Modification de la taille maximale |
event_cache_purged |
Purge complète d'un Cache |
event_cache_partition_purged |
Purge d'une CachePartition |
| Variable | Défaut | Rôle |
|---|---|---|
FILE_CACHING_MAXIMUM_FAILED_PRUNE_ATTEMPTS |
3 | Nombre d'échecs de verrouillage tolérés avant abandon |
FILE_CACHING_MAXIMUM_NORMAL_PRUNE_ATTEMPTS |
50 | Nombre de suppressions normales avant abandon de la passe |
| Permission | Rôle |
|---|---|
permission_cache_view |
Consulter les caches et leurs statistiques |
permission_cache_purge |
Vider un cache ou une partition |
Deux widgets sont ajoutés au tableau de bord administrateur :
maximum_size de tous les caches# Vider tous les caches ou un cache spécifique
manage.py file_caching_purge_cache
Les apps suivantes créent leurs propres caches via DefinedStorage :
DocumentFilePage, DocumentVersionPage)Chaque app déclare son DefinedStorage nommé dans son storages.py, puis crée une entrée Cache correspondante lors de initial_setup.