Projet

Général

Profil

Scénario #28733

Thot et import AAF au format ENT2VA: nombreuses erreurs

Ajouté par arnaud grossir il y a plus de 4 ans. Mis à jour il y a plus de 4 ans.

Statut:
Terminé (Sprint)
Priorité:
Normal
Assigné à:
Catégorie:
-
Début:
07/06/2019
Echéance:
30/08/2019
% réalisé:

100%

Temps estimé:
(Total: 3.00 h)
Points de scénarios:
4.0
Restant à faire (heures):
0.00 heure
Estimation basée sur la vélocité:
Release:
Liens avec la release:
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


Sous-tâches

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


Demandes liées

Précède Thot - Scénario #28951: Thot et import AAF au format ENT2VA: erreurs restantes Terminé (Sprint) 23/09/2019 11/10/2019

Révisions associées

Révision 8f11b6d9 (diff)
Ajouté par Joël Cuissinat il y a plus de 4 ans

logparser : détection des erreurs d'import LDAP

Ref: #28733

Révision c6731680 (diff)
Ajouté par Joël Cuissinat il y a plus de 4 ans

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

Ref: #28733

Révision 9d396a96 (diff)
Ajouté par Joël Cuissinat il y a plus de 4 ans

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é)

#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

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 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)

Formats disponibles : Atom PDF