Devoirs, paramètre assignfeedback_editpdf non respecté => table mdl_files/disque se remplissent inutilement

Devoirs, paramètre assignfeedback_editpdf non respecté => table mdl_files/disque se remplissent inutilement

par Laurent Wafflard,
Nombre de réponses : 9
Avatar Moodleurs particulièrement utiles

Bonjour,


Problème constaté sur les feedback PDF aussi bien sur Moodle 3.8 que 3.10 installés sur des Debian 10 / Php 7.3 / unoconv 0.7 / ghostscript 9.27 (et vu ici sur les forum anglophones).


Par défaut, le plugin de Feedback «Annotation PDF» est activé sur Moodle (Administration du site / Plugins / Modules d'activité / Devoir / Plugins de feedback / Annotation PDF), nous le désactivons mais nous nous sommes aperçu (suite à des problèmes de conversion de certains documents ...) que quelque soit ce paramétrage et surtout celui fait spécifiquement au niveau de chaque devoir par les enseignants, tous les documents déposés par les étudiants sont envoyés dans la file d'attente (table «mdl_assignfeedback_editpdf_queue») pour conversion (tâche «\assignfeedback_editpdf\task\convert_submissions»).


Dans les documents envoyés pour conversion, on a retrouvé (dans des devoirs ou le feedback «Annotation PDF» n'était pas activé) des rapports de simulation de près de 2000 pages ou des PDF générés à partir de photo sur des pages de hauteur 100m (ça fait un gros gros png 😬), étant donné ce qu'on a compris du fonctionnement de l'annotation PDF (génération d'un fichier png par page, stockage dans différents filearea de la table files: combined/pages/readonlypages) on arrive a une occupation loin d'être négligeable inutilement aussi bien pour l'espace disque que pour la table mdl_files.

Quelques requêtes pour se faire une idée:

-- Nombre de devoir avec/sans feedback pdf activé (value=1 => activé)
SELECT value, count(*) FROM mdl_assign_plugin_config WHERE plugin='editpdf' AND name='enabled' GROUP BY value;

-- Table des fichiers, par composant tout filearea confondus
SELECT component, COUNT(*) AS nbFiles, SUM(filesize)/1024/1024 AS sizeMo FROM mdl_files GROUP BY component ORDER BY sizeMo DESC;


Sur notre plateforme de production actuelle :

  • en nombre de fichiers, assignfeedback_editpdf représente plus de 80% des entrées de mdl_files
  • en espace disque, près de 60% du poids total des fichiers y est attribué
  • moins de 5% des devoirs sont configurés avec le feedback PDF activé


Le ticket MDL-71909 a été ouvert sur le tracker, si vous êtes dans le même cas n'hésitez pas à voter/commenter.

Moyenne des évaluations Utile (5)
En réponse à Laurent Wafflard

Re: Devoirs, paramètre assignfeedback_editpdf non respecté => table mdl_files/disque se remplissent inutilement

par Christian Bocquet,
Avatar Moodleurs particulièrement utiles
Bonjour,

 Après quelques tests de vérification, désactiver la tâche programmée «\assignfeedback_editpdf\task\convert_submissions» devrait résoudre votre problème pour les futurs devoirs sans pénaliser les enseignants qui veulent utiliser «Annotation PDF».
La table «mdl_assignfeedback_editpdf_queue» va se remplir. Il faudrait tester s'il n'y a pas de problème à la  nettoyer, mais à mon avis non.

Christian
Moyenne des évaluations Utile (3)
En réponse à Christian Bocquet

Re: Devoirs, paramètre assignfeedback_editpdf non respecté => table mdl_files/disque se remplissent inutilement

par Laurent Wafflard,
Avatar Moodleurs particulièrement utiles
Bonjour Christian,

Merci pour les tests et pour le retour, c'est effectivement un contournement possible mais dans ce cas on va à l'envers du fonctionnement prévu (qui fait les conversions en arrière plan) et il me semble qu'on s'expose à quelques nouveaux risques.

Au lieu d'avoir des documents convertis séquentiellement les uns après les autres (via la tâche qui respecte la limite de tentatives de conversion et n'est pas soumis à un timeout), le document est converti à la volée lorsque l'enseignant le demande. Pour des «petits» documents ça devrait pouvoir aller, moins si un groupe d'enseignants corrige «en même temps des documents lourds».

Par exemple, je ne sais pas comment unoconv se comporterait si une nouvelle conversion était enclenchée alors qu'une autre serait déjà en cours ? Ça ne peut se produire avec la tâche qui traite un à un alors que ça pourrait se produire avec deux enseignants qui provoqueraient une conversion à la volée.
En réponse à Laurent Wafflard

Re: Devoirs, paramètre assignfeedback_editpdf non respecté => table mdl_files/disque se remplissent inutilement

par Christian Bocquet,
Avatar Moodleurs particulièrement utiles

Bonjour,

Il faudrait tester.
Mais ce n'est pas possible pour moi.

Mais ce cas de figure peut déjà se présenter quand la fréquence du lancement du cron est faible, toutes les heures par exemple, et que plusieurs correcteurs décident d’annoter des devoirs remis avant le lancement du cron.

En réponse à Laurent Wafflard

Re: Devoirs, paramètre assignfeedback_editpdf non respecté => table mdl_files/disque se remplissent inutilement

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Bonjour Laurent,

Merci pour l'ouverture de cette discussion et de ce ticket. De mon côté, je retrouve des éléments semblables sur notre plateforme principale (en Moodle 3.7), avec une place folle occupée par ces fichiers :

SELECT component, COUNT(*) AS nbFiles, ROUND(SUM(filesize)/1024/1024/1024, 2) AS sizeGo
FROM mdl_files GROUP BY component ORDER BY sizeGo DESC LIMIT 10;
+------------------------+---------+--------+
| component              | nbFiles | sizeGo |
+------------------------+---------+--------+
| assignfeedback_editpdf | 1391491 | 141.23 |
| mod_resource           |  132164 | 112.78 |
| assignsubmission_file  |  143067 |  58.94 |
| mod_folder             |   28393 |  49.19 |
| mod_hvp                |   11192 |  29.51 |
| user                   |    6153 |  15.60 |
| backup                 |     464 |   6.27 |
| question               |   76641 |   6.10 |
| mod_lesson             |     573 |   5.89 |
| mod_forum              |    9865 |   5.54 |
+------------------------+---------+--------+


SELECT COUNT(*) AS nbFiles, ROUND(SUM(filesize)/1024/1024/1024,2) AS sizeGo FROM mdl_files;
+---------+--------+
| nbFiles | sizeGo |
+---------+--------+
| 1898705 | 448.55 |
+---------+--------+

Séverin

Moyenne des évaluations Utile (3)
En réponse à Séverin Terrier

Re: Devoirs, paramètre assignfeedback_editpdf non respecté => table mdl_files/disque se remplissent inutilement

par Daniel Méthot,
Avatar Moodleurs particulièrement utiles
Merci à tous.
Info utile.
Tâche désactivée en attente de solution.
Daniel
En réponse à Daniel Méthot

Re: Devoirs, paramètre assignfeedback_editpdf non respecté => table mdl_files/disque se remplissent inutilement

par Laurent Wafflard,
Avatar Moodleurs particulièrement utiles
Bonjour Séverin, Daniel,

Merci beaucoup, je me moins seul 🙂

Je n'ai pas de 3.7 sous la main pour vérifier, mais le plugin de feedback pdf (assignfeedback_editpdf|default) est aussi activé par défaut pour tous les devoirs ? Enfin dans tous les cas, de ce que j'ai pu voir sur 3.8 et 3.10 il ne sert pas à grand chose de le désactiver, pas plus que dans les devoirs, d'où le ticket

Merci pour les autres requêtes et pour les résultats, de mon côté j'ai à peu près le même ratio, les fichiers générés pour l'édition PDF prennent à peu près trois fois plus que les fichiers originaux déposés dans les devoirs:

+------------------------+---------+--------+
| component | nbFiles | sizeGB |
+------------------------+---------+--------+
| assignfeedback_editpdf | 735003 | 126.96 |
| assignsubmission_file | 81062 | 41.33 |
| mod_resource | 23097 | 19.03 |
| mod_folder | 9300 | 13.45 |
| core | 9176 | 3.44 |
| assignfeedback_file | 2916 | 2.13 |
| mod_bigbluebuttonbn | 1014 | 1.74 |
| course | 472 | 0.94 |
| mod_book | 323 | 0.51 |
| mod_label | 366 | 0.49 |
+------------------------+---------+--------+

+---------+--------+
| nbFiles | sizeGB |
+---------+--------+
| 879823 | 211.84 |
+---------+--------+

Ces fichiers sont bien entendus aussi intégrés dans les sauvegardes automatiques de cours (ça ralenti donc aussi ces processus en plus d'alourdir l'ensemble des fichiers de sauvegardes) et ça n'aide pas les requêtes sur la table des fichiers surtout quand elles sont moyennement bien conçues...

De mon côté la tâche tourne toujours, je préfère perdre quelques (dizaines de) Go et que le service soit fonctionnel pour ceux qui l'utilisent plutôt que des montées en charge imprévues ou des plantages de conversions/unoconv (qui n'est pas non plus le plus limpide des processus que j'ai croisé ).

Pour ce qui est de la compréhension du problème, je n'ai pas eu le temps de me repencher dessus mais jusque là il me semble que:
  • la tâche programmée ne se pose pas de question => conversion de tout ce qui se trouve dans la table «mdl_assignfeedback_editpdf_queue»
  • dans la fonction save_submission de /mod/assign/localib.php, une entrée est créée dans cette table au passage de la boucle suivante pour le plugin «assign_submission_file»
    foreach ($this->submissionplugins as $plugin) {
if ($plugin->is_enabled() && $plugin->is_visible()) {
if (!$plugin->save($submission, $data)) {
$notices[] = $plugin->get_error();
$pluginerror = true;
}
}

En essayant de «suivre» le code, je me suis arrêté au niveau de l'appel $event->trigger() de la fonction save() du fichier /mod/assign/submission/file/locallib.php

Si le ticket n'attire pas plus que ça, j'envisagerai l'écriture d'un script de «nettoyage» qui supprimerait tous les fichiers attachés à un devoir où le feedback est désactivé.

Laurent
En réponse à Laurent Wafflard

Re: Devoirs, paramètre assignfeedback_editpdf non respecté => table mdl_files/disque se remplissent inutilement

par Bruno Malaval,
Avatar Moodleurs particulièrement utiles

Bonjour,

De mon coté, voici les résultats

Concernant le fonctionnement de l'annotation, je pense que le réglage qui consiste à activer/désactiver l'annotation à un effet "cosmétique".
I.e. : l'enseignant voit ou non les conversions pdf, mais elles sont produites de base pour tous les dépôts.

Je suppose qu'au niveau de la programmation, cela serait complexe de produire / supprimer / re-produire / etc ... les conversions pdf à chaque activation ou non du feedback dans un cours.
Il faudrait de plus que le simple changement (activation/désactivation) de ce feedback soit mémorisé afin de gérer la production/suppression des pdf.

Par contre j'ai effectué un test sur un cours, et visiblement la réinitialisation du cours en supprimant les devoirs remis ne supprime pas les fichiers pdf issus des conversions.
Je retenterai pour être sûr, mais si c'est bien le cas, je trouve cela beaucoup plus problématique.

Bruno

Moyenne des évaluations Utile (1)
En réponse à Bruno Malaval

Re: Devoirs, paramètre assignfeedback_editpdf non respecté => table mdl_files/disque se remplissent inutilement

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Salut Bruno,
Ne serait-ce pas MDL-69570 ?

À bientôt,
Patrick
En réponse à Patrick Lemaire

Re: Devoirs, paramètre assignfeedback_editpdf non respecté => table mdl_files/disque se remplissent inutilement

par Bruno Malaval,
Avatar Moodleurs particulièrement utiles
Salut Patrick,

Je n'avais pas cherché dans le tracker, mais oui c'est bien ça.
Il y a quels pistes pour contourner le pb, mais ce serait bien d'avoir une solution stable.

J'ai voté ...

Bruno