zestedesavoir/zds-site

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

Opened this issue · 1 comments

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 :

shutil.copy2(pdf_file_path, published_content_entity.get_extra_contents_directory())

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.

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.