Scénario #28733
Thot et import AAF au format ENT2VA: nombreuses erreurs
100%
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
Sous-tâches
Demandes liées
Révisions associées
logparser : détection des erreurs d'import LDAP
Ref: #28733
Test Thot aaf complet 1901 : enchaînement avec une maj à partir des mêmes fichiers
Ref: #28733
Test Thot aaf complet 1901 : enrichissement du test
Ref: #28733
Historique
#1 Mis à jour par Joël Cuissinat il y a plus de 4 ans
- Tracker changé de Demande à Scénario
- Sujet changé de Thot et import AAF au firmat ENT2VA: nombreuses erreurs à Thot et import AAF au format ENT2VA: nombreuses erreurs
- Echéance mis à 30/08/2019
- Version cible mis à sprint 2019 27-35 Equipe MENSR (été)
#2 Mis à jour par Joël Cuissinat il y a plus de 4 ans
Nous reproduisons la plupart des problèmes remontés :
- test 2.6.2 : https://dev-eole.ac-dijon.fr/jenkins/job/2.6.2/job/test-thot-aaf-complet-1901-2.6.2-amd64/
- test 2.7.0 : https://dev-eole.ac-dijon.fr/jenkins/job/2.7.0/job/test-thot-aaf-complet-1901-2.7.0-amd64/
- test 2.7.1 : https://dev-eole.ac-dijon.fr/jenkins/job/2.7.1/job/test-thot-aaf-complet-1901-2.7.1-amd64/
#3 Mis à jour par Joël Cuissinat il y a plus de 4 ans
- Points de scénarios mis à 4.0
#4 Mis à jour par Joël Cuissinat il y a plus de 4 ans
- Assigné à mis à Joël Cuissinat
- Release mis à EOLE 2.7.1.1
#5 Mis à jour par Joël Cuissinat il y a plus de 4 ans
- 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 Mis à jour par arnaud grossir il y a plus de 4 ans
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 Mis à jour par Joël Cuissinat il y a plus de 4 ans
- Précède Scénario #28951: Thot et import AAF au format ENT2VA: erreurs restantes ajouté
#8 Mis à jour par Joël Cuissinat il y a plus de 4 ans
- Statut changé de Nouveau à Terminé (Sprint)