Project

General

Profile

Anomalie #22722

Probleme dans la détection des zones arena

Added by Renaud Dussol over 6 years ago. Updated about 6 years ago.

Status:
Fermé
Priority:
Haut
Assigned To:
Target version:
Start date:
01/12/2018
Due date:
% Done:

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

Associated revisions

History

#1 Updated by Christophe LEON over 6 years ago

  • Assigned To changed from Christophe LEON to Renaud Dussol

#2 Updated by Renaud Dussol over 6 years ago

Ok pour supprimer le break

#3 Updated by Renaud Dussol over 6 years ago

  • Status changed from Nouveau to Résolu
  • % Done changed from 0 to 100

#4 Updated by Christophe LEON about 6 years ago

  • Target version set to Envole 5.8

#5 Updated by Arnaud FORNEROT about 6 years ago

  • Status changed from Résolu to Fermé

Also available in: Atom PDF