Bug #44787
crash en fin de production d'un pdf
0%
Description
Comme si libreoffice n'avait pas fait son travail :
Exception: type = '<class 'FileNotFoundError'>', value = '[Errno 2] No such file or directory: '/tmp/tmpi2ekentd/tmphfch6u49.pdf'' Stack trace (most recent call first): File "/usr/lib/python3/dist-packages/wcs/wf/export_to_model.py", line 87, in transform_to_pdf 85 raise Exception('libreoffice is failing') 86 finally: > 87 shutil.rmtree(temp_dir) 88 except subprocess.CalledProcessError: 89 transform_to_pdf = None locals: chunk = b'' infile = <tempfile._TemporaryFileWrapper object at 0x7fcfd13cf518> instream = <_io.BytesIO object at 0x7fcfcb78a200> temp_dir = '/tmp/tmpi2ekentd'
Fichiers
Révisions associées
workflows: retry PDF generation if it fails for some unknown reason (#44787)
misc: don't use capture_output as it requires python 3.7 (#44787)
misc: don't use capture_output as it requires python 3.7 (#44787)
workflows: isolate libreoffice UserInstallation directory (#44787)
Historique
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Fichier 0001-workflows-retry-PDF-generation-if-it-fails-for-some-.patch 0001-workflows-retry-PDF-generation-if-it-fails-for-some-.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Je pose ça ici. (c'est avec du debug en plus posé sur la prod, pour voir)
Mis à jour par Frédéric Péters il y a plus de 3 ans
Et pour info ça fonctionne :/ (cas d'appel sur la prod qui est passé lors de la deuxième itération).
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Fichier 0001-workflows-retry-PDF-generation-if-it-fails-for-some-.patch 0001-workflows-retry-PDF-generation-if-it-fails-for-some-.patch ajouté
Version qui utilise capture_output=True et "loggue" stderr.
Mis à jour par Thomas Noël il y a plus de 3 ans
- Statut changé de Solution proposée à Solution validée
Tristesse, mais on n'arrive pas à en savoir plus, alors go.
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit b92ee201e21506fd07032010bc638c4a911ab19c Author: Frédéric Péters <fpeters@entrouvert.com> Date: Fri Jul 3 14:37:38 2020 +0200 workflows: retry PDF generation if it fails for some unknown reason (#44787)
Mis à jour par Frédéric Péters il y a plus de 3 ans
Trop à la page, capture_output c'est uniquement à partir de 3.7...
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Thomas Noël il y a plus de 3 ans
Exemple de crash loggué sur wcs.node1 (Mon, 06 Jul 2020 16:34:59 +0200) :
/var/lib/wcs/demarches.strasbourg.eu /tmp/tmp8hlg03w1 /tmp/tmp8hlg03w1/tmpfdakn8yt -> Error0: /var/lib/wcs/demarches.strasbourg.eu stdout:b'' stderr:b'' -> Error1: /var/lib/wcs/demarches.strasbourg.eu stdout:b'' stderr:b'' -> Error2: /var/lib/wcs/demarches.strasbourg.eu stdout:b'' stderr:b'' -> Output2: /var/lib/wcs/demarches.strasbourg.eu stdout:b'' stderr:b'' -> Finally: /var/lib/wcs/demarches.strasbourg.eu /tmp/tmp8hlg03w1 []
stdout et stderr vides :/
Pas de dmesg ou journalctl qui remonte hier à 16h34
Mis à jour par Thomas Noël il y a plus de 3 ans
Je pense que j'ai trouvé la source du pépin. En lançant 5 processus de conversion concurrents sur ma machine, la plupart du temps 2 ou 3 se terminent mal et sans aucune sortie. On aurait donc un problème de concurrence. En lançant l'affaire via "strace" je constate que libreoffice reécrit par exemple /home/thomas/.config/libreoffice/4/user/registrymodifications.xcu
Je n'ai pas trouvé d'option dans libreoffice pour lui force un emplacement de .config ailleurs.
En bidouillant avec un HOME=/tmp/random avant chaque lancement, ça semble mieux passer.
Mis à jour par Thomas Noël il y a plus de 3 ans
- Fichier 0001-workflows-isolate-libreoffice-UserInstallation-direc.patch 0001-workflows-isolate-libreoffice-UserInstallation-direc.patch ajouté
- Statut changé de Solution déployée à Solution proposée
En creusant, je suis arrivé sur https://ask.libreoffice.org/en/question/7284/multiple-instances-for-c-automation/ et l'usage de « -env:UserInstallation=file:///tmp/xxx »
Ma proposition, donc, en gardant quand même pour l'instant la sécurité moche de "tenter 3 fois".
Mis à jour par Christophe Siraut il y a plus de 3 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Thomas Noël il y a plus de 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 8dfa5c8c62d21d124ae1b0bdbe4da0cd31037925 Author: Thomas NOEL <tnoel@entrouvert.com> Date: Tue Jul 7 15:42:42 2020 +0200 workflows: isolate libreoffice UserInstallation directory (#44787)
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
Il me semble que les gens qui utilisent loffice headless le lancent en mode serveur pour éviter ça.
Mis à jour par Pierre Ducroquet il y a plus d'un an
Je plussois le commentaire de Benjamin, je suis tombé sur plusieurs instances de LibreOffice tournant sur un wcs et j'ai été un peu surpris.
Outre la possibilité de mieux comprendre ce qu'il se passe, ça nous apporterait aussi un gain en performance.
Sur ma machine, convertir un document en PDF avec la commande de wcs prend 900ms/1s. Si par contre je lance LibreOffice en headless (il pourrait alors tourner avec un utilisateur à part, ou être relancé automatiquement par systemd ou que sais-je, avec en prime le --safe-mode) et que je m'y connecte en Python, la conversion prend 300ms.
Pour référence, le lancement de libreoffice:
libreoffice --headless --safe-mode --accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"
Et le code python:
#!/usr/bin/env python3 import uno # no joke... from com.sun.star.beans import PropertyValue def from_local(): localContext = uno.getComponentContext() resolver = localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext) context = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext") desktop = context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", context) component = desktop.loadComponentFromURL("file:///home/pierre/Documents/demo.odt", "_default", 0, ()) pv = PropertyValue() pv.Name = "FilterName" pv.Value = "writer_pdf_Export" component.storeToURL("file:///tmp/test01.pdf", [pv]) component.close(0)
My deux centimes.
Mis à jour par Benjamin Dauvergne il y a plus d'un an
Ouvre un autre ticket, personne ne lit les vieux tickets.
Mis à jour par Frédéric Péters il y a plus d'un an
Personne ne lit les tickets fermés. (ce qui n'est même pas vrai).
workflows: retry PDF generation if it fails for some unknown reason (#44787)