PnX-SI / gn_module_import

Module GeoNature d'import de données
7 stars 11 forks source link

[Doublons UUID ] erreur silencieuse si doublons sur uuid #459

Open gildeluermoz opened 1 year ago

gildeluermoz commented 1 year ago

VERSION 2.0.6 Lors de l'import d'un fichier source comportant des uuid existants dans la synthèse (et d'autres non existants), le module fait la vérification des données, ne détecte pas d'erreur et propose le bouton pour importer toutes les lignes. En cliquant sur le bouton, l'import ne se fait pas. Sans message explicite concernant le problème rencontré. En regardant les logs, il y a dans le fichier, des UUID existants déjà dans la synthèse.

[2023-07-17 09:54:08,126: ERROR/ForkPoolWorker-2] Task gn_module_import.tasks.do_import_in_synthese[f1cb717a-f755-444d-970f-76ec71afe41c] raised unexpected: IntegrityError("(psycopg2.errors.UniqueViolation) ERREUR:  la valeur d'une clé dupliquée rompt la contrainte unique « unique_id_sinp_unique »\nDETAIL:  La clé « (unique_id_sinp)=(da5ec3af-3ace-428d-a8fe-0da549b98575) » existe déjà.\n")
Traceback (most recent call last):
  File "/home/gamadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1277, in _execute_context
    cursor, statement, parameters, context
  File "/home/gamadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 608, in do_execute
    cursor.execute(statement, parameters)
psycopg2.errors.UniqueViolation: ERREUR:  la valeur d'une clé dupliquée rompt la contrainte unique « unique_id_sinp_unique »
DETAIL:  La clé « (unique_id_sinp)=(da5ec3af-3ace-428d-a8fe-0da549b98575) » existe déjà.

on s'attend à ce que le module remonte les lignes en erreur comme il le fait pour les autres champs et propose d'importer les données importables (celles qui n'ont pas de doublons sur l'UUID).

gildeluermoz commented 1 year ago

Le param ENABLE_SYNTHESE_UUID_CHECK est celui par défaut : = true

DonovanMaillard commented 1 year ago

Merci Gil,

Normalement ca doit lever une erreur sur les lignes en question et rendre uniquement les lignées doublonées "invalides".

bouttier commented 9 months ago

Le contrôle de l’unicité des UUID ne se fait que sur les données dans le même JDD pour des raisons de performance. Mais cela amène en conséquence à un potentiel plantage s’il y a bien des doublons … La requête contrôlant les UUID dupliqué a entre temps été amélioré, et peut-être que la restriction du contrôle au même JDD est jouable. Pour faire sauter cette limitation sur le JDD, il faut commenter cette ligne : https://github.com/PnX-SI/gn_module_import/blob/74d79409d849dbc5212382009cca9d2645a4bf1c/backend/gn_module_import/checks/sql/__init__.py#L355

bouttier commented 9 months ago

Cette limitation avait été mise en place dans le cadre d’une grosse instance sur laquelle les contrôles été très long, et sur laquelle la contrainte d’unicité sur l’uuid synthèse avait été remplacé par une contrainte d’unicité (jdd,uuid), donc l’erreur à l’insertion dans la synthèse ne pouvait pas se produire. Si on garde ce filtre JDD, il faut qu’il soit configurable, et qu’il ne soit pas présent par défaut, car il ne correspond pas à la contrainte d’unicité par défaut.