Project

General

Profile

Scénario #28733

Thot et import AAF au format ENT2VA: nombreuses erreurs

Added by arnaud grossir 2 months ago. Updated 4 days ago.

Status:
Terminé (Sprint)
Priority:
Normal
Assigned To:
Category:
-
Start date:
06/07/2019
Due date:
08/30/2019
% Done:

100%

Estimated time:
(Total: 3.00 h)
Story points:
4.0
Remaining (hours):
0.00 hour
Velocity based estimate:
Release:
Release relationship:
Auto

Description

Bonjour, nous essayons d'importer les données AAF au format ENT2VA sur un serveur Thot 2.6, nous avons environ 170 établissements qui sont importés dans Thot

1) nous constatons que si nous suivons les préconisations qui consistent à faire un "aaf-complet", puis ensuite des imports aaf-complet-maj, et qu'entre temps le format de l'export AAF a changé, le traitement échoue.
En effet, si de nouveaux attributs apparaissent dans les xml de l'aaf, alors ces changements ne sont pas répercutés dans la base mysql "eoleaaf": des champs manquent et nous avons des erreurs de type:

Lecture du fichier /home/aaf-complet/THOT_Complet_20190704_PersEducNat_0000.xml
Lecture des administratifs...
Traceback (most recent call last):
  File "/usr/sbin/parseaaf.py", line 12, in <module>
    main(path_aaf_complet, reset_db)
  File "/usr/lib/python2.7/dist-packages/eoleaaf/parseaaf.py", line 40, in main
    parse_xml_files(xmlfile['pattern'], xmlfile['function'], xml_files, aaf)
  File "/usr/lib/python2.7/dist-packages/eoleaaf/miscutil.py", line 29, in parse_xml_files
    getattr(lib, aaffunc)(fname)
  File "/usr/lib/python2.7/dist-packages/eoleaaf/aaf.py", line 429, in parse_aaf_profs
    parse_aaf('administratif', profs_file, 'PersEducNat')
  File "/usr/lib/python2.7/dist-packages/eoleaaf/aaf.py", line 353, in parse_aaf
    db_userdata = db.fetchone(sql)
  File "/usr/lib/python2.7/dist-packages/eoleaaf/util.py", line 119, in fetchone
    self.cursor.execute(sql + ' LIMIT 1;')
  File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 226, in execute
    self.errorhandler(self, exc, value)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorvalue
_mysql_exceptions.OperationalError: (1054, "Unknown column 'ENTPersonCategorieEnseignant' in 'field list'")

2)J'ai récupéré les fichiers mis à jours, (sur https://dev-eole.ac-dijon.fr/projects/envole-connecteur/repository/) et qui ont été modifiés depuis que nous avons fait l'installation de notre serveur, mais comme nous avons fait le primo-import avec l'ancien format ENT, ça n'a pas changé grand-chose. Il a fallu que je modifie la structure de la base mysql à la main

ALTER TABLE etablissement ADD ENTStructureMailSI VARCHAR(100);
ALTER TABLE eleve ADD ENTPersonCodePostal VARCHAR(5);
ALTER TABLE eleve ADD EntPersonAdresse TEXT;
ALTER TABLE eleve ADD EntPersonVille VARCHAR(100);
--ALTER TABLE eleve ADD ENTPersonPays VARCHAR(100); pas ajouté, je l'enlève des xml via un sed, car l'attribut veut le code iso (FR p.ex.) du pays, pas son nom complet
ALTER TABLE eleve ADD ENTEleveAdresseRel VARCHAR(50);
ALTER TABLE enseignant ADD ENTPersonCategorieEnseignant VARCHAR(1);
ALTER TABLE administratif ADD ENTPersonCategorieEnseignant VARCHAR(1);
Alter TABLE enseignant MODIFY ENTAuxEnsGroupes TEXT;

Rien de bien méchant, les champs texte MODIFIES se voyants passer de type VARCHAR à TEXT pour les champs susceptibles de contenir de très longues chaines - donc sans perte de données.

A savoir que l'attribut ldap ENTPersonPays veut le code ISO-2lettres du nom de pays (FRANCE=FR par ex.), cf les spec du schema ldap, et n'est pas intégrable dans le ldap en l'état (c'est par exemple "FRANCE", "AUTRE PAYS" ou TCHEQUE, REPUBLIQUE" qui descend de l'aaf), il faudrait faire un mappage NOM<>CODE ISO (difficile pour "AUTRE PAYS")
La liste des pays (contenue dans la table "pays" de RAMSESE) est gérée nationalement et ne contient pas ce code iso.

3)De plus nous voyons beaucoups d'autres erreurs qui ne sont pas très exploitable à cause du fait (je suppose) que python fonctionne en thread et qu'il y a une concurrence d'écriture des différents threads à la console. Par exemple (en gras la ligne coupée):

modifying ldap_modify: Type or value exists (20)
additional info: ENTAuxEnsMatiereEnseignEtab: value #0 provided more than once
ldap_modify: Type or value exists (20)
additional info: ENTAuxEnsMatiereEnseignEtab: value #0 provided more than once
ldap_modify: Type or value exists (20)
additional info: ENTAuxEnsMatiereEnseignEtab: value #0 provided more than once
ldap_modify: Type or value exists (20)
additional info: ENTAuxEnsMatiereEnseignEtab: value #0 provided more than once
entry "uid=DRS97332,ou=personnes,dc=enoe,dc=net"

Force est de constater que les erreurs ne correspondent pas du tout à la ligne coupée, mais à une ligne plus en amont... donc il est extrêmement difficile de débugger, voire impossible, c'est une remarque très importante.

4)Erreur de comparaison unicode, entre les datas ldap et les datas mysql

Lecture du fichier /home/aaf-complet/THOT_Complet_20190708_Eleve_0000.xml
Lecture des eleves...
/usr/lib/python2.7/dist-packages/eoleaaf/aaf.py:366: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
  if db_userdata != userdata:
TOTAL : 3566 eleves

ou

Lecture du fichier /home/aaf-complet/THOT_Complet_20190627_EtabEducNat_0000.xml
Lecture des etablissements...
/usr/lib/python2.7/dist-packages/eoleaaf/aaf.py:479: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
  if db_etab != etablissement:

J'ai l'impression que dans ce cas, le processus considère que TOUTES les entrés, y conpris les suivantes sont considérées comme inégale, ce qui fait que les ldif générés contiennent la totalité des objets de la classe traitée. Le ldif des UPDATE contient, par exemple, tous les eleves... ce qui est étrange pour un delta (même s'il provient d'un aaf-complet-maj)

5) Erreur : valeurs dupliquées

ldap_modify: Type or value exists (20)
    additional info: ENTPersonAutresPrenoms: value #1 provided more than once

ldap_modify: Type or value exists (20)
    additional info: ENTStructureGroupes: value #67 provided more than once

ldap_modify: Type or value exists (20)
    additional info: ENTAuxEnsMatiereEnseignEtab: value #0 provided more than once

Pour ENTPersonAutresPrenoms, j'ai remarqué que nous avons bien souvent des valeurs en double dans les xml aaf
(ex: Pierre, Mathieu, Pierre), il faudrait dédoublonner

Pour tout ce qui concerne les Matières, les classes et les groupes, j'ai remarqué que le problème ne vient pas toujours qu'il y ait un doublons, mais aussi, parce que dans le cas d'un enseignant qui a des cours sur deux établissements, on voit bien deux lignes mais qui commencent les 2 par l'id de l'établissement de rattachement, alors qu'on devrait avoir 2 lignes qui commencent avec des id d'établissement différents. En ce qui concerne les affectations, c'est très bien géré par vos scripts, on voit bien les 2 id etablissements, mais pas pour les autres attributs susceptibles de rencontrer ce cas de figure)

6) objet inexistant:

ldap_modify: No such object (32)
    matched DN: ou=personnes,dc=enoe,dc=net

Là, je suppose que c'est parce que l'objet (par exemple un établissement) a bien été crée dans la base mysql une première fois mais que son import dans le ldap a achoué. Ensuite, lors de l'aaf-complet-maj suivant, le script détecte qu'il est bien dans la base mysql, alors il ne le passe pas dans le ldif-create mais dans le ldif-maj... et il essaye de faire une maj sur un objet qui n'existe pas dans le ldap

7) syntaxe ldap non valide

ldap_modify: Invalid syntax (21)
    additional info: ENTAuxEnsMatiereEnseignEtab: value #0 invalid per syntax

ldap_modify: Invalid syntax (21)
    additional info: ENTAuxEnsMatiereEnseignEtab: value #1 invalid per syntax

là je sèche car impossible de savoir (cf point 3) quelles sont les lignes concernées

A la rentrée prochaine nous aurons quasiment tous nos établissements dans cet annuaire Thot, il me semble urgent de se pencher sur ces problèmes, car sinon nous serons bloqués et tout notre travail autour de ce serveur tombera à l'eau (identification, fédération d'identité...)
Notre serveur Thot sera malheureusement, en cas de non-résolution de ces problèmes, considéré comme non opérationnel. Ce qui serait "un tout petit peu" embêtant, vous en conviendrez...

Merci en tout cas de bien vouloir prendre en compte cette remontée de bugs suite au passage aaf ENT2VA.
D'autres académies, de toutes façons, rencontreront certainement ces problèmes, voire d'autres.

Bonne journée à vous, et bonnes vacances pour les juilletistes !
Cordialement


Subtasks

Tâche #17259: Modifier/enrichir les tests automatiques Thot pour qu'ils valident la prise en charge des nouveaux attributsFerméJoël Cuissinat

Tâche #25617: Traiter l'erreur "ENTPersonCategorieEnseignant"FerméJoël Cuissinat

Tâche #28562: Thot: echec import AAf : doublons dans les classes d'un établissement donné (dans ldif)FerméJoël Cuissinat

Tâche #28741: Traiter l'erreur "ENTStructureMailSI"FerméJoël Cuissinat

Tâche #28746: Traiter les erreurs liées à l'adresse postale des élèvesFerméJoël Cuissinat

Tâche #28754: Vérifier le format de l'attribut ENTPersonPaysFerméJoël Cuissinat

Tâche #28755: Vérifier la comparaison unicode, entre les datas ldap et les datas mysqlFerméJoël Cuissinat

Tâche #28756: aaf-complet-maj : améliorer le code de détection des comptes modifiésFerméJoël Cuissinat

Tâche #28782: Ajouter les nouveaux attributs SDET 6.2 au schéma LDAP en prévisionFerméJoël Cuissinat


Related issues

Precedes Thot - Scénario #28951: Thot et import AAF au format ENT2VA: erreurs restantes Nouveau 07/18/2019 10/11/2019

Associated revisions

Revision 8f11b6d9 (diff)
Added by Joël Cuissinat 2 months ago

logparser : détection des erreurs d'import LDAP

Ref: #28733

Revision c6731680 (diff)
Added by Joël Cuissinat 2 months ago

Test Thot aaf complet 1901 : enchaînement avec une maj à partir des mêmes fichiers

Ref: #28733

Revision 9d396a96 (diff)
Added by Joël Cuissinat 2 months ago

Test Thot aaf complet 1901 : enrichissement du test

Ref: #28733

History

#1 Updated by Joël Cuissinat 2 months ago

  • Tracker changed from Demande to Scénario
  • Subject changed from Thot et import AAF au firmat ENT2VA: nombreuses erreurs to Thot et import AAF au format ENT2VA: nombreuses erreurs
  • Due date set to 08/30/2019
  • Target version set to sprint 2019 27-35 Equipe MENSR (été)

#3 Updated by Joël Cuissinat 2 months ago

  • Story points set to 4.0

#4 Updated by Joël Cuissinat 2 months ago

  • Assigned To set to Joël Cuissinat
  • Release set to EOLE 2.7.1.1

#5 Updated by Joël Cuissinat 2 months ago

Liste des tâches associées aux différents points abordés dans ce scénario :
  • 1) et 2) gestion des nouveaux attributs : #25617, #28741, #28746
  • 2bis) format de l'attribut ENTPersonPays : #28754
  • 2ter) extension du champ MySQL : enseignant.ENTAuxEnsGroupes : #28768
  • 3) et 5) gestion des doublons : #28562
  • 3bis) concurrence d'écriture : #FIXME
  • 4) erreur de comparaison unicode : #28755
  • 4bis) update complet systématique : #28756
  • 6) objet inexistant : #FIXME
  • 7) syntaxe ldap non valide : #FIXME

TODO : penser à reporter les corrections en 2.7.X (eole-aaf + eole-ldapschema)

#6 Updated by arnaud grossir 9 days ago

Bonjour, voici mon retour concernant toutes les corrections que vous avez réalisées:

En ce début d'année, j'ai effectué une maj de notre serveur Thot 2.6.2 afin d'obtenir le paquet python-eoleaaf 2.6.6-23 et puis un aaf-complet. Je n'ai pas remarqué de problème.

Ensuite j'ai réalisé un aaf-complet-maj qui, lui renvoie encore des erreurs, mais beaucoup moins qu'avant:

Pour moi, les points 1, 2, 2bis et 2ter sont OK, ainsi que le 3 , 4, 4bis

Le 5 n'est pas résolu, vous faites référence pour le numéro 5("gestion des doublons") à ma demande https://dev-eole.ac-dijon.fr/issues/28562 (qui concerne les doublons de classes/groupes lors de l'époque de changement d'année), cette demande différente est, elle, bien résolue

Mais le point 5 de la demande en cours n'est pas résolu.
Il impacte, par exemple, un professeur de musique ayant des cours dans deux établissements différents (son établissement d'affectation "A" + un autre établissement "B"), mais qui se retrouve au final avec certains attributs (ENTAuxEnsMatiereEnseignEtab et ENTAuxEnsClasses, par exemple) qui font référence uniquement à l'établissement de rattachement "A" (et jamais à l'établissement "B"). Mais j'ouvrirai une nouvelle demande concernant ce point, en essayant d'être + précis et compréhensible.

En tout cas, merci beaucoup pour tout le travail réalisé, on avance vraiment bien

J'ouvre une autre demande + précise pour ce point 5

Cordialement

#7 Updated by Joël Cuissinat 4 days ago

  • Precedes Scénario #28951: Thot et import AAF au format ENT2VA: erreurs restantes added

#8 Updated by Joël Cuissinat 4 days ago

  • Status changed from Nouveau to Terminé (Sprint)

Also available in: Atom PDF