-
Notifications
You must be signed in to change notification settings - Fork 102
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[gn_commons] Questionnements sur la synchronisation des médias #2436
Comments
Le but de la fonction sync media est de faire du nettoyage sur les medias
elle n'a pas forcement besoin d'être appellée à chaque insert/ update de media et elle pourrait n'être appellée qu'une fois par jour avec Pour info il existe un hook dans app.py pour supprimer le fichier media quand la ligne est supprimée dans TMedia GeoNature/backend/geonature/app.py Lines 120 to 125 in 6e6e903
|
En effet, il ne faudrait pas appeler cette commande de nettoyage des médias orphelins à chaque ajout ou modification d'un média, pour ne pas alourdir cette opération. |
Merci beaucoup pour vos retours et ces explications ! |
Par exemple dans monitoring, quand on crée un site on peut lui attacher des medias on va uploader et enregister les medias si on a validé les medias et qu'on a arreté avant de valider le site le ou les medias n'auront pas d'uuid_attached_row 24h c'est arbitraire pour laisser le temps de valider apres avoir saisi les medias en ce qui concerne les fichiers orphelin, cela peut arriver si l'on supprime des medias en bdd directement |
Ah oui je comprends, c'est parce que les médias sont uploadés avant de valider la création d'un objet attaché. Merci en tout cas pour ces explications @joelclems ! Si j'ai un peu de temps j'essaierai d'ouvrir une PR qui va dans ce sens ! |
Intégré dans la 2.13.0. |
Contexte
Dans le cadre d'une prestation avec l'ARB île de France, nous nous sommes posés des questions sur le traitement des média sur le système de fichier du serveur.
Explications
A chaque insertion ou modification d'un média, une requête POST/PUT est émise à la route
/media
qui ensuite fait appel entre autres à cette fonction :GeoNature/backend/geonature/core/gn_commons/medias/routes.py
Line 97 in 6e6e903
Qui est située ici :
GeoNature/backend/geonature/core/gn_commons/repositories.py
Line 391 in 6e6e903
Si je ne dis pas de bêtises, lorsque cette fonction est appelée, tous les fichiers médias présents dans leur dossier de stockage sont recherchés :
GeoNature/backend/geonature/core/gn_commons/repositories.py
Line 426 in 6e6e903
Et ces derniers sont éventuellement renommés en
deleted_
s'ils n'existent plus en base.Problématique
A chaque création ou modification d'un seul média, tous les fichiers présents sur le système de fichiers sont "traités", ce qui peut être un processus long quand il y a beaucoup de média.
Question
Pensez-vous qu'il serait possible de revoir cette synchronisation en ne la faisant que sur l'objet effectivement traité ?
Potentielles solutions
Il serait possible d'utiliser un hook sqlalchemy de type post_delete/post_insert/post_update (doc SQLAlchemy) ou quelque chose du genre pour traiter le fichier directement lors de sa modification en base.
Nous faisons cela sur d'autres projets pour gérer le lien entre la base de données et un système de stockage s3 et cela fonctionne plutôt bien. Ce sont néanmoins des cas plus simples que GeoNature...
Peut-être d'autres solutions sont possibles.
Merci d'avance pour vos retours !
The text was updated successfully, but these errors were encountered: