1 points par GN⁺ 2023-12-01 | 1 commentaires | Partager sur WhatsApp

Découverte et résolution d’un bug étrange

  • Pendant une astreinte de l’équipe des outils internes, des utilisateurs du logiciel interne de Gusto ont subi des plantages du navigateur Chrome.
  • Ce problème a provoqué diverses perturbations pour le service client.
  • Pour le résoudre, de l’aide a été demandée à des collègues expérimentés, à l’équipe d’infrastructure produit et à l’équipe IT.

Premier indice

  • Une tentative a été faite pour trouver un point commun entre les utilisateurs affectés.
  • Tous les employés de Gusto n’étaient pas touchés, et le logiciel orienté client ne présentait aucun problème.
  • Les autres pages web du logiciel interne fonctionnaient normalement.
  • Les plantages survenaient de manière irrégulière, et le problème ne se produisait ni sur Safari ni sur Firefox.

Deuxième indice

  • L’hypothèse a été posée que la version de Chrome pouvait être en cause.
  • Chez certains utilisateurs, le problème semblait avoir été résolu après une mise à jour de Chrome, sans toutefois disparaître complètement.
  • Il a aussi été supposé qu’une extension Chrome pouvait être responsable, mais le problème se reproduisait même sans extension.

Difficulté à reproduire le bug

  • L’équipe d’infrastructure a demandé à tous les ingénieurs d’essayer de reproduire le problème.
  • À l’exception de deux ingénieurs en Turquie, aucune équipe d’ingénierie n’a signalé de plantage.
  • La fonction de rapport de crash de Chrome étant désactivée pour des raisons de sécurité, cela a compliqué l’enquête.

Un coup de chance décisif

  • Un ingénieur à Denver a signalé que le problème était apparu après avoir téléchargé l’application de bureau Grammarly.
  • Il a été constaté que supprimer l’application Grammarly puis redémarrer l’ordinateur résolvait le problème.

Des progrès

  • Une fois le débogage rendu possible, plusieurs essais ont été menés pour identifier la cause.
  • L’application interne principale était construite sur ActiveAdmin, mais les nouvelles parties utilisant React ne plantaient pas.
  • En examinant la partie de code commune, il a été découvert que le menu déroulant My History était à l’origine du problème.

Résolution du problème

  • Il a été confirmé que le fichier image loader-spinner.gif provoquait le problème.
  • Après avoir remplacé ce GIF par une autre image, la page ne plantait plus.
  • Il n’est pas clair si c’est Grammarly ou Chrome qui a corrigé le problème, car le GIF d’origine ne fait désormais plus planter Chrome.

Conclusion

  • Un GIF animé inattendu a finalement été la clé du débogage.
  • Le problème a été résolu grâce à la curiosité et à la collaboration.
  • Gusto offre la possibilité de travailler avec des personnes collaboratives et curieuses.

L’avis de GN⁺

Le point le plus important de cet article est la description détaillée du processus de découverte et de résolution d’un bug causé par une origine inattendue. Il montre la complexité et l’imprévisibilité du software engineering, tout en soulignant à quel point le travail d’équipe et la persévérance dans la résolution de problèmes sont essentiels. Il offre un exemple fascinant de la manière dont une équipe d’ingénierie peut collaborer pour résoudre un problème particulièrement déroutant, ce qui en fait une lecture très attrayante pour les personnes intéressées par l’ingénierie.

1 commentaires

 
GN⁺ 2023-12-01
Avis de Hacker News
  • En lisant, je me suis demandé si ce n’était pas un problème lié à Grammarly ; j’ai déjà rencontré un bug au comportement similaire, impossible à reproduire, mais qui affectait beaucoup de personnes au sein d’un service précis
    Au final, le point commun était l’installation de l’extension Grammarly, et cela ne se produisait que sur une URL d’aperçu de staging, pas sur le site en production
    La cause était une expression régulière incorrecte dans l’extension Grammarly, et la page se figeait dès que le nom de domaine dépassait environ 100 caractères
    Si, dans ce cas, c’est vraiment l’application desktop qui en est la cause, c’est encore plus inquiétant

    • J’ai été déçu que la conclusion soit : « comme on ne peut pas voir l’intérieur de Grammarly ou de Chrome, on ne sait pas pourquoi le décodage/rendu du GIF provoque un crash »
      Beaucoup de problèmes sont circonscrits à une combinaison précise, mais si l’on ne sait pas pourquoi, ce n’est pas satisfaisant
    • Aujourd’hui encore, j’ai débogué une expression régulière qui permettait à un utilisateur de mettre le backend en déni de service en saisissant une mauvaise valeur dans un formulaire
      Je suis donc en train de lire le moteur d’expressions régulières : https://swtch.com/%7Ersc/regexp/regexp1.html
    • J’ai vécu quelque chose de similaire il y a environ 5 ans avec un logiciel de vidéosurveillance basé sur le web
      Lors d’une mise à niveau généralisée vers Windows 10, on a remplacé le vieux portable d’un manager ; les procédures étaient bien en place, avec vérification des exigences logicielles et réseau, sauvegarde du profil utilisateur et des documents, etc.
      La fiche d’évaluation du matériel mentionnait un ThinkPad de 10 ans, 4 Go de RAM, et une note indiquant qu’il s’éteignait dès qu’on débranchait le câble d’alimentation ; la patience avec laquelle il s’en accommodait était impressionnante
      Après le déploiement du nouveau portable, presque tout fonctionnait, sauf le transfert de la licence Grammarly ; une demande a donc été faite, et une semaine plus tard la clé de licence a été appliquée et Grammarly a été confirmé comme fonctionnant normalement
      Mais plus tard dans la journée, il nous a signalé que la page web des caméras de sécurité plantait ; le helpdesk a tenté redémarrage, suppression du cache, réinstallation du navigateur et recréation du profil, sans succès, puis le dossier m’a été transmis
      J’ai vérifié le réseau, les logs du pare-feu, d’autres PC, les accès sur site et externes, mais tout fonctionnait de mon côté et personne d’autre n’avait le problème
      Quand j’ai demandé s’il y avait eu récemment un changement sur son PC ou dans son bureau, il a répondu en plaisantant : « J’ai installé Grammarly aujourd’hui, ce serait ça ? » ; à court d’idées, on l’a vraiment désinstallé, et ça a fonctionné
      On a réactivé Grammarly et cliqué sur le lien : l’échec était alors parfaitement reproductible
      Ce logiciel de caméras était très ancien, le lien personnalisé de la page d’accueil ressemblait à une URL PHP générée extrêmement longue, et cette personne était la seule sur site à utiliser Grammarly, donc le problème n’est apparu qu’une seule fois
    • Quand un bug de site web ne se résout pas facilement, la première étape devrait être de désactiver toutes les extensions
      Les développeurs oublient souvent qu’une extension peut être en cause, alors qu’une extension peut faire toutes sortes de choses à une page web
  • Un professeur d’université écrivait un article et disait que le soulignement ne restait pas ; j’ai pensé à une simple erreur utilisateur et que je l’aiderais en 5 minutes
    Mais il a fallu plus de 3 heures pour découvrir qu’une combinaison précise d’une version de pilote de carte vidéo et d’une version de pilote d’imprimante empêchait uniquement l’impression du soulignement

    • Je trouve ça moins grave que le bug Xerox qui modifiait les chiffres dans des documents scannés
      https://www.zdnet.com/article/xerox-scanners-alter-numbers-i...
    • Je me demande comment ils ont réussi à identifier une combinaison aussi particulière en à peine 3 heures
    • Je ne comprends pas comment une carte vidéo peut influencer l’impression
  • Même si le signalement de crash est désactivé, il est possible qu’un fichier .dmp ait été créé quelque part dans le répertoire du profil utilisateur
    En téléversant manuellement ce fichier dans un bug sur https://crbug.com/new, les développeurs de Chrome pourront le déboguer
    Si, pour des raisons similaires à celles qui ont motivé la désactivation du signalement de crash, vous ne pouvez pas partager le dump, vous pouvez compiler minidump_stackwalk depuis Chromium afin de produire une trace de pile sans symboles et l’ajouter au bug
    Les développeurs de Chrome pourront ensuite y rattacher les symboles
    Les détails se trouvent sur https://www.chromium.org/developers/decoding-crash-dumps/

  • La combinaison de technologies qui a créé ce bug est intéressante. Le web de 2023 ressemble exactement à ça
    J’aimerais savoir si le bug Chromium a été corrigé, mais cette liste n’est pas facile à parcourir : https://bugs.chromium.org/p/chromium/issues/list?can=1&q=gif...
    J’aime aussi l’impression que Gusto a publié ça pour montrer que « ce n’était pas de notre faute » tout en lançant une petite pique à Grammarly

    • Comme ce n’était pas un problème visible de l’extérieur, ça ressemble moins à une question de responsabilité qu’à une simple anecdote amusante et à de la publicité gratuite
    • Ce GIF doit absolument être rendu public
    • C’était peut-être ce ticket : https://bugs.chromium.org/p/chromium/issues/detail?id=129770...
  • Après avoir démarré sous Linux, il arrivait que le son ne fonctionne pas ; il s’est avéré que c’était lié à la configuration en dual boot Windows
    Quand on redémarrait depuis Windows, celui-ci n’éteignait pas complètement le périphérique audio Realtek et le laissait seulement en veille, et Linux n’arrivait pas à le démarrer
    La seule solution était de toujours éteindre Windows puis d’appuyer sur le bouton d’alimentation pour rallumer la machine, et le problème existe encore : https://askubuntu.com/questions/1032543/no-sound-in-ubuntu-1...

    • J’ai aussi vu un cas presque inverse
      Quelqu’un qui utilisait Windows et Linux en dual boot ne voyait le Wi-Fi fonctionner qu’après avoir démarré sous Windows puis redémarré vers Linux
      L’installation Linux n’avait pas le paquet de firmware pour la carte Wi-Fi ; après un redémarrage depuis Windows, le périphérique était déjà prêt, mais pas lors d’un démarrage à froid directement sous Linux
    • Il y a eu quelque chose de similaire dans l’autre sens. Quand on redémarrait depuis Linux, Windows 10 faisait un écran bleu pendant le démarrage
    • Je me demande si désactiver le changement rapide d’utilisateur n’aurait pas résolu le problème
    • J’ai déjà vu un comportement similaire avec des périphériques Bluetooth il y a quelques années
  • Je suis d’accord pour dire que la chute est vraiment décevante
    Comme ils n’ont accès ni au code source de Chrome ni à celui de Grammarly, ils ne peuvent que spéculer ; je me demande si c’est le résultat produit par le mouvement « open source »
    Sans code source, certains développeurs se retrouvent complètement perdus et refusent de creuser davantage, et pour les entreprises qui n’ont pas envie que la vérité sorte, cette attitude doit être très bienvenue
    Autrefois, beaucoup de gens désassemblaient, comprenaient et patchaient des programmes même sans les sources, et bon nombre d’entre eux n’étaient même pas développeurs professionnels
    Ils étaient simplement motivés par l’envie de faire fonctionner le logiciel comme ils le voulaient, et finissaient naturellement par apprendre ce dont ils avaient besoin
    L’article touche aussi à la complexité délirante de toute la stack. Quand on voit les frameworks empilés les uns sur les autres, une bonne partie du problème semble auto-infligée
    Ils disent que supprimer loader-spinner.gif, c’est-à-dire l’espace réservé affiché pendant le chargement des options du menu, a fait cesser les crashs de la page ; je me demande déjà si le chargement d’options de menu prend vraiment assez longtemps pour nécessiter une animation

    • Attendre de tous les développeurs qu’ils sachent patcher des binaires est, pour le dire poliment, irréaliste
      Le monde de l’ingénierie logicielle est immense, et il est devenu depuis longtemps quasiment impossible de connaître toutes les parties de la stack
      En plus, l’ingénierie logicielle est un parcours d’apprentissage, et chacun se trouve à un endroit différent de ce parcours
    • Même avec l’open source, il semble y avoir globalement peu de volonté de lire réellement le code
      Sans même parler d’ouvrir un désassembleur ou d’attacher un débogueur ; on dirait que ces compétences sont désormais peu enseignées
    • Il y aura sans doute une requête réseau pour récupérer les options du menu
      Même si, en général, elle se termine presque instantanément, prévoir un spinner de chargement pour le cas où cela prendrait du temps est logique
  • Le bug le plus étrange, c’était quand un utilisateur disait que le texte qu’il saisissait dans un formulaire précis changeait après l’enregistrement
    Au début, je pensais qu’une autre personne modifiait le même formulaire en même temps, mais les logs montraient que non, et sur mon ordinateur je voyais le bon texte
    Puis j’ai remarqué sur une capture d’écran que certains libellés de menu étaient eux aussi étranges, et la cause était que l’option « Traduire cette page » de Chrome était activée
    Une fois que je lui ai expliqué comment changer correctement la langue dans l’application, le problème a disparu

    • Après avoir découvert un bug où Chrome cassait la page, j’ai ajouté le réglage correspondant à toutes les pages d’une web app monopage
      Il semble que ce soit désormais la nouvelle consigne à appliquer à une app ou à un élément. Ce n’est probablement pas du CSS pour éviter d’avoir à prendre en charge les changements dynamiques, et visuellement ce n’est pas joli : https://developer.mozilla.org/en-US/docs/Web/HTML/Global_att...
      Parfois, en regardant les balises meta de grosses apps monopage et en cherchant pourquoi elles sont nécessaires, je découvre de nouvelles horreurs
    • C’est vraiment pénible
      Je m’appuie souvent sur Google Translate pour lire des sites japonais, et tous les sites qui utilisent React se cassent
      C’est parce que React et Google Translate essaient tous deux de mettre à jour les nœuds DOM sans se connaître
      J’ai même déjà regardé sérieusement l’implémentation de Google Translate pour voir si je pourrais un jour refaire des widgets web qui n’aient pas ce problème
      [1] https://bugs.chromium.org/p/chromium/issues/detail?id=872770
    • Je me demande s’il traduisait l’anglais en américain, ou quelque chose du genre
    • Cette histoire est assez drôle pour être envoyée à DaylyWTF ou un site du même genre
  • C’est un problème trop familier
    J’ai déjà vu les outils d’accessibilité de Chrome provoquer ce genre de souci dans des menus déroulants, et c’était reproductible avec un HTML minuscule
    Le bug précis sur lequel je suis tombé il y a deux ans était dans Chromium-Edge, mais les symptômes et la cause étaient très similaires
    Grammarly s’appuie presque certainement sur une partie des outils d’accessibilité de Chrome
    Ces outils diffèrent légèrement selon les navigateurs basés sur Chromium, comme Edge, Brave ou Chrome

    • Si cette hypothèse est la bonne, je me demande si cela signifie que Grammarly Desktop voit le GIF, appelle d’une manière ou d’une autre des fonctions d’accessibilité du navigateur, et que Chrome n’arrive pas à gérer ça et crashe
  • La prochaine fois que ça arrive, je recommande simplement de faire utiliser un autre navigateur
    Firefox, en particulier, s’est beaucoup amélioré pour importer les favoris, mots de passe, etc. depuis Chrome
    L’univers envoie un signal indiquant qu’il est temps de changer, et nous ne pouvons pas refuser le signal
    Pour info, je suis ingénieur Firefox, mais cela n’a aucun rapport avec ce conseil

    • Du point de vue d’un ingénieur, Firefox est effectivement une bonne solution
      Du point de vue d’un PM, on vient de passer quatre mois à simplifier l’onboarding, et maintenant il faudrait dire aux gens d’installer un nouveau navigateur ?
    • C’est déjà indiqué dans l’article lié comme contournement
    • Chrome représente plus de la moitié du marché
      Qu’un produit basé sur le navigateur ne fonctionne pas correctement dans le navigateur le plus utilisé au monde n’est pas un bon signe
  • J’adore vraiment les politiques de sécurité d’entreprise qui bloquent les rapports de plantage de Chrome pour des raisons de sécurité, tout en permettant aux employés d’installer Grammarly