PnEcrins / GeoNature-mobile-webapi

WebAPI (coté serveur) de synchronisation des données produites par GeoNature-mobile
6 stars 2 forks source link

Bug Rollback #8

Open TheoLechemia opened 5 years ago

TheoLechemia commented 5 years ago

Lorsqu'on envoie des données qui provoquent des erreur à l'écriture en base (character varying pour une colonne qui attend des entiers, id observateur non présent en base etc...), le rollback effectué ne semble pas fonctionner. L'erreur suivante est levée:

SynchronizeError: ERREUR:  la transaction est annulée, les commandes sont ignorées jusqu'à la fin du bloc
de la transaction

et le json n'est pas enregistré dans la table d'archivage des erreurs.

gildeluermoz commented 5 years ago

La transaction est annulée...

C'est pas justement un rollback ça ? Je n'ai pas pris le temps de regarder le code mais pour éviter que ça remonte en erreur, il faudrait capturer l'erreur avec un RAISE ou faire ça dans un try except en Python.

TheoLechemia commented 5 years ago

J'ai essayé de le faire sans succès. Et si le rollback fonctionnait, on pourrait écrire dans la table d'erreurs, ce qui n'est pas le cas.

gildeluermoz commented 5 years ago

Je regarderai de plus près. Mais l'erreur levée n'est pas l'erreur d'écriture dont tu parles :

character varying pour une colonne qui attend des entiers, id observateur non présent en base etc...

IL y a bien un rollback :ERREUR: la transaction est annulée,... mais ce qui n'est pas normal c'est justement qu'il leve une erreur.

TheoLechemia commented 5 years ago

Mais l'erreur levée n'est pas l'erreur d'écriture dont tu parles

Je n'ai pas mis la trace entière. La 1ère erreur qui est levée est du genre "impossible d'inserer un id_role non présent dans la table t_roles". Ensuite la web-api lève l'erreur que j'ai mise SynchronizeError: ERREUR: la transaction est annulée ... J'ai déjà eu ça dans GeoNature. Quand il y a une erreur SQL et que le rollback n'est pas (ou mal) effectué, toute les commandes exécutées ensuite ne passe pas. Ici l'écriture dans la table d'erreur n'est pas effectué. Et je suis presque totalement sût que c'est parce que le rollback ne marche pas.