Projet

Général

Profil

Anomalie #22722

Probleme dans la détection des zones arena

Ajouté par Renaud Dussol il y a plus de 6 ans. Mis à jour il y a environ 6 ans.

Statut:
Fermé
Priorité:
Haut
Assigné à:
Version cible:
Début:
12/01/2018
Echéance:
% réalisé:

100%

Distribution:

Description

Nous avons remarqué lors de nos premiers tests en préprod que la détection de zones arena ne fonctionnait pas en zone agriates.

En effet les ressources affichées étaient celles de la zone internet (zone par défaut) et non des 2 zones agriates + internet.

Après une analyse + poussée du problème, voici ce qui apparait :

- Le probleme vient en fait d'un portail (rectorat) qui n'est pas atteignable de ce réseau et qui reste dans l'état "undefined" durant plusieurs minutes. Il n'y a pas de réponse claire et donc l'état de la zone n'est pas flagué à true ou false mais reste en undefined. Un appel direct depuis le navigateur vers ce portail reste de même en attente durant plusieurs minutes.
- Tant que cet appel ajax n'a pas répondu, le script ne remplit pas le tableau arrZones avec les autres zones, même si elles sont correctement accessibles.
- Au final le script fait un timeout sans avoir rempli aucune des valeurs du tableau arrZones.
- Après l'exécution de ce script, une sécurité fait que si ARENA_ZONE_DEFAUT n'est pas dans le tableau arrZones, elle est ajoutée automatiquement. (ce qui explique qu'on voit la zone internet)

Lorsque je regarde plus attentivement ce script :

ng/public/elements/edispatcher-ressources/edispatcher-ressources.html

- On remarque qu'une première partie lance les appels ajax vers les images (contour_bleu_vert.gif) des zones
- Ensuite une deuxième partie fait un loop (avec setInterval) qui se relance toutes les 10 ms,

                bOk=true;arrZones={}
                nbCount++
                for( zone in zones ) {
                    // ETat de la zone pas encore défini
                    if (  zones[zone].loaded==undefined) {
                      bOk=false;break;
                             }
                    if (zones[zone].loaded) arrZones[zone]=zones[zone]
                   }

Pour moi il y a un problème avec le break du 1er if : en effet, tant que l'état d'une seule zone est à undefined, le script s'arrête (break) et est relancé ensuite par le setInterval, mais sans avoir populé le tableau arrZones (puisque le break est arrivé avant). Il suffit donc qu'on ait une zone dont l'état reste trop longtemps undefined, pour que le script "reboote" sans cesse avec un arrZones vide.
Lorsque le nbCount est dépassé (suite du script), on a alors le clearInterval qui interrompt l'exécution du script. Si la zone qui met trop de temps à répondre n'a pas répondu dans ce délai, le tableau arrZones est resté vide.
J'ai fait un test en commentant le break; Cela semble fonctionner correctement.

                bOk=true;arrZones={}
                nbCount++
                for( zone in zones ) {
                    // ETat de la zone pas encore défini
                    if (  zones[zone].loaded==undefined) {
                      bOk=false;
                      //break;
                             }
                    if (zones[zone].loaded) arrZones[zone]=zones[zone]
                   }

Parallèlement notre équipe système a fait en sorte que la réponse du firewall pour le portail depuis la zone en question soit plus rapide et plus claire ("REFUSED" au lieu de "DISCARD").
Cette modification donne un bon résultat avec le script d'origine (sans commenter le break donc) : la réponse du firewall flague l'état de la zone comme loaded=false et plus comme undefined.

Cependant je pense qu'il y a un problème avec ce break (ou le script en général). On constate notamment que lorsqu'on est sur internet (en 4G ou de chez soi), en fait le script ne fonctionne pas du tout : les appels des images contour_bleu_vert se traduisent par des timeout DNS qui laissent l'état en "undefined" et au final, le tableau arrZones est vides, et se remplit ensuite avec ARENA_ZONE_DEFAUT qui est la zone internet. On ne s'aperçoit pas que ça ne marche pas, puisque la zone attendue est celle qui est affichée, mais en fait la détection elle-même ne marche pas.

Je ne sais pas s'il suffit de commenter ce break pour que tout rentre dans l'ordre, j'attends ton analyse et ton expertise du pb.
Si ce break est là c'est qu'il doit y avoir une raison (performances ?)
Y a-t-il d'autres moyens de faire ce test ?

Chose tout à fait annexe, mais vu qu'ARENA_ZONE_DEFAUT est de toutes façons ajoutée au tableau arrZones même si celui-ci est vide, on pourrait l'exclure des tests, ce serait toujours ça de gagné...

Révisions associées

Historique

#1 Mis à jour par Christophe LEON il y a environ 6 ans

  • Assigné à changé de Christophe LEON à Renaud Dussol

#2 Mis à jour par Renaud Dussol il y a environ 6 ans

Ok pour supprimer le break

#3 Mis à jour par Renaud Dussol il y a environ 6 ans

  • Statut changé de Nouveau à Résolu
  • % réalisé changé de 0 à 100

#4 Mis à jour par Christophe LEON il y a environ 6 ans

  • Version cible mis à Envole 5.8

#5 Mis à jour par Arnaud FORNEROT il y a environ 6 ans

  • Statut changé de Résolu à Fermé

Formats disponibles : Atom PDF