Nettoyage du cache d'objets fédérés
Le cache de l'instance Mastodon comporte bien trop d'objets pour être synchronisé correctement vers garage, il est question d'y nettoyer les objets fédérés qui peuvent être aisément retelechargés.
Aussi, comme le mode de stockage a changé dans l'histoire de Mastodon sans migration, il coexiste du stockage mélangé local-fédéré avec du stockage d'objets fédérés séparés.
Compréhension de la stack
Le stockage est basé integralement sur Paperclip, qui gère le backend différencié entre local et S3. Les champs file_name
et updated_at
sont directement bindés sur Paperclip.
Le chemin Paperclip inclut dans l'ordre : un préfixe, un type d'objet, un id (décimal, par blocs de 3 chiffres en hiérarchie de sous dossiers), la famille d'objet (original, miniature, etc.) et le fichier lui-même. Cette structure créée en moyenne 3 à 4 répertoires par fichier, soir plus de 10M d'inodes pour les quelques 3M d'objets qu'on avait en cache, de quoi effondrer le filesystem. Ça devrait être moins gourmand en ressources une fois dans S3.
Le concern Remoteable est en charge de distinguer entre le local et le distant. Lorsque le domaine est distant il inclut le préfixe cache/
en début de chemin. Ce comportement est récent et l'attribut de storage_version
différencie l'historique qui n'a pas été migré.
Le concern Cacheable gère la mise en cache de certains objets et le service à travers une URL de proxy quand le cache local n'est pas peuplé.
Au programme pour mettre ça d'applomb :
-
Mener un premier nettoyage manuel concluant et le documenter -
Ajouter et jouer une commande de migration de version de stockage pour distinguer le local du distant -
Ajouter une commande de vidage complet du cache à jouer avant la synchro S3
Nettoyage des preview cards
Procédure standard et efficace :
tootctl preview_cards delete
Nettoyage des pièces jointes
Première étape pour le cache standard, qui ne nettoie pas tout :
tootctl media delete
Suppression du cache dans une version de stockage récente :
rm -rf cache/media_attachments
Marquage comme supprimé pour forcer le passage par le media proxy et remise en cache à l'affichage :
update media_attachments set media_file_name=null, media_updated_at=null where media_storage_version=1