zestedesavoir / zds-site

Cœur du projet technique de Zeste de Savoir
https://zestedesavoir.com
Other
269 stars 161 forks source link

Renommer et republier un contenu pendant un export lève des exceptions #6638

Open philippemilink opened 2 weeks ago

philippemilink commented 2 weeks ago

Sentry rapporte l'erreur suivante :

FileNotFoundError: [Errno 2] No such file or directory: '/opt/zds/data/contents-public/un-contenu/extra_contents'
  File "zds/tutorialv2/management/commands/publication_watchdog.py", line 67, in run
    publicator.publish(md_file_path, base_name)
  File "zds/tutorialv2/publication_utils.py", line 445, in publish
    shutil.copy2(pdf_file_path, published_content_entity.get_extra_contents_directory())

la ligne en question : https://github.com/zestedesavoir/zds-site/blob/30d805bdb450b908165d588ba536085e4a48d14c/zds/tutorialv2/publication_utils.py#L445

Ce qu'il s'est passé :

  1. Le contenu Un contenu a été publié
  2. Les demandes d'export ont été créées et ont commencé à être traitées, par exemple l'export en PDF
  3. Pendant ce temps, le contenu a été renommé en Un contenu plus précis et publié dans la foulée
  4. Le changement de titre (à vérifier, mais plus précisément : la publication après un changement de titre) change le nom du dossier de la version publique du contenu (on passe de contents-public/un-contenu à contents-public/un-contenu-plus-precis). Cependant, l'export en cours est en train de travailler sur contents-public/un-contenu, qui n'existe plus et va donc causer des erreurs de fichiers/dossiers non trouvés.

Solution

Vu tous les problèmes possibles qui peuvent arriver si on modifie la version publique d'un contenu pendant que le contenu est en train d'être exporté, je me demande s'il ne faut pas imaginer une sorte de verrou qui empêcherait de publier un contenu tant qu'un export est en cours.

Arnaud-D commented 2 weeks ago

Est-ce que ça serait possible d'interrompre l'export en cours pour relancer ensuite avec le nouveau ? Ça me paraît plus facile à l'usage. Si on remplace la version en ligne, il n'y a de toute façon pas de raison d'avoir l'export de la version précédente et niveau expérience utilisateur, c'est fluide.