Projet

Général

Profil

Bug #57540

crash SQL sur un import d'un export complet (zip)

Ajouté par Thomas Noël il y a plus de 2 ans. Mis à jour il y a plus de 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
03 octobre 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Sur un import d'un export.wcs, j'ai ce crash :

Exception:
  type = '<class 'psycopg2.ProgrammingError'>', value = 'relation "formdata_2_formulaire_pour_test_charte_gr" does not exist
LINE 1: SELECT count(*) FROM formdata_2_formulaire_pour_test_charte_...
                             ^
'

qui serait lié à cette partie du code :


  File "/usr/lib/python3/dist-packages/wcs/formdef.py", line 410, in store
   408             # the formdef is currently being imported (self.id is None)
   409             # or if there are not yet any submitted forms
>  410             if self.id is None or self.data_class().count() == 0:
   411                 self.internal_identifier = new_internal_identifier
   412         StorableObject.store(self, *args, **kwargs)

  locals: 
     args = ()
     comment = None
     kwargs = {}
     new_internal_identifier = 'page-pour-test-charte-graphique'
     object_only = False
     self = <FormDef 'Page pour test charte graphique' id:2>

car si le formulaire n'a pas encore de id, alors il n'a pas encore de table et donc le count SQL ne peut pas passer (et donc self.id is None or self.data_class().count() == 0: = boum)


Fichiers

export.wcs (793 octets) export.wcs Thomas Noël, 04 octobre 2021 21:18
0001-formdef-don-t-try-preserving-intenral_identifier-in-.patch (4,14 ko) 0001-formdef-don-t-try-preserving-intenral_identifier-in-.patch Frédéric Péters, 05 octobre 2021 13:54

Révisions associées

Révision 2d2e90fb (diff)
Ajouté par Frédéric Péters il y a plus de 2 ans

formdef: don't try preserving internal_identifier in SQL mode (#57540)

Historique

#2

Mis à jour par Thomas Noël il y a plus de 2 ans

Thomas Noël (congés → 11 octobre) a écrit :

car si le formulaire n'a pas encore de id, alors il n'a pas encore de table et donc le count SQL ne peut pas passer (et donc self.id is None or self.data_class().count() == 0: = boum)

N'importe quoi j'ai dit.

En fait on se retrouve plutôt ici avec un formdef qui a un id (self = <FormDef 'Page pour test charte graphique' id:2>) mais n'a pas encore de table SQL. J'ai cherché sans rien trouver.

#5

Mis à jour par Frédéric Péters il y a plus de 2 ans

  • Assigné à mis à Frédéric Péters
#6

Mis à jour par Frédéric Péters il y a plus de 2 ans

Ça ferait suite à #57118 (avant les tables n'étaient pas créées à l'import), je regarderai.

#7

Mis à jour par Thomas Noël il y a plus de 2 ans

Pour reproduire, voici un export contenant un seul mini formdef nommé "crash 57540" (il porte l'id numéro 424242 qui n'existe certainement nulle part et on peut donc tenter un import sans risque). J'en ai modifié le XML ainsi :

-  <internal_identifier>crash-57540</internal_identifier>
+  <internal_identifier>changed-crash-57540</internal_identifier>

et en cherchant à faire l'import on arrive bien au crash SQL.

#8

Mis à jour par Frédéric Péters il y a plus de 2 ans

Comme le internal_identifier est exclusivement utilisé en mode pickle je choisis de juste ne pas faire de requête en SQL.

En passant il me semble que ça lève un autre problème avec cette idée de changement de nom de domaine par export/import, le nom de la table n'est pas dans l'export XML d'un formdef/carddef, résultat il va être recalculé et peut se trouver être différent de celui du site d'origine.

(ma préférence est d'arrêter avec cette perspective d'export/export et de plutôt voir pour une bascule qui se fasse avec les mêmes fichiers et la même base de données, à discuter ailleurs).

#13

Mis à jour par Thomas Noël il y a plus de 2 ans

  • Statut changé de Solution proposée à Solution validée
#15

Mis à jour par Frédéric Péters il y a plus de 2 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 2d2e90fbb51260f47d49465a82494b838bb8943f
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Tue Oct 5 10:23:18 2021 +0200

    formdef: don't try preserving internal_identifier in SQL mode (#57540)
#16

Mis à jour par Frédéric Péters il y a plus de 2 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF