Un comportement bogué mord .NET SqlClient, mais uniquement pour ceux qui n’utilisent pas Windows

  • FrançaisFrançais


  • En février, les développeurs de logiciels .NET utilisant Microsoft.Data.SqlClient, un pilote d’accès aux données open source pour Microsoft SQL Server, ont remarqué que certaines requêtes étaient lentes ou expiraient sous Linux dans des circonstances spécifiques.

    Le problème (# 442), signalé sur GitHub, est resté sans solution depuis près d’un an maintenant.

    En juillet, Nerijus Arlauskas, un développeur basé en Lituanie, a constaté que les clients non Windows (macOS, Linux, WSL, Docker) renvoyaient parfois des résultats invalides pour les requêtes, un problème distinct mais peut-être lié (# 659).

    C’est un problème potentiellement sérieux lorsqu’une base de données fournit des informations inexactes. “En aucun cas une instruction SELECT ne doit renvoyer un résultat différent”, a écrit Arlauskas dans son rapport. “Cela peut provoquer des pannes d’applications, des fuites de données personnelles, des utilisateurs achetant des produits pour le compte d’autres utilisateurs et des failles de sécurité.”

    Ou comme cela a été dit dans le film de 1984 Ghostbusters, “sacrifice humain, chiens et chats vivant ensemble, hystérie de masse!”

    Heureusement, ces erreurs ne se produisent que rarement – sur des systèmes exécutant 2000 connexions simultanées ou plus, entre autres conditions de qualification – mais cela rend la cause première plus difficile à diagnostiquer et à réparer.

    Il y a environ un mois, Cheena Malhotra, développeur principal chez Magnitude Software, basé aux États-Unis, a soumis une requête d’extraction qui corrige divers autres bogues résultant d’opérations asynchrones interférant les unes avec les autres. Les modifications ont été fusionnées dans la base de code SqlClient mais elles n’ont pas résolu les problèmes # 442 et # 659.

    Le problème n ° 442 posait des problèmes depuis bien avant qu’il ne soit signalé en février. Dans son article plus tôt cette année, Pawel Pabich, directeur de l’ingénierie chez Octopus Cloud à Brisbane, Australie, a déclaré: “Nous luttons contre ce problème depuis longtemps maintenant, nous sommes donc heureux d’aider de toutes les manières possibles pour le résoudre. . “

    Pabich a expliqué qu’Octopus Cloud héberge des instances Octopus Deploy dans des conteneurs Linux sur Azure AKS avec des données stockées dans Azure Files et Azure SQL. Plusieurs mois avant sa publication de février, a-t-il déclaré, la société avait remarqué que certaines requêtes SQL étaient lentes ou expiraient, ce que la société n’avait jamais vu auparavant sous Windows sous le framework .NET. Il a suggéré que SqlClient pourrait avoir quelque chose à voir avec cela.

    Ce bogue est suffisamment frustrant pour que des développeurs comme Samm Desmond, co-fondateur de la blockchain biz Nodesmith et ingénieur logiciel chez Shelf Engine, ont écrit dans un commentaire mercredi: “Nous avons eu des problèmes majeurs et avons commencé à réécrire tout ce qui touche le base de données à utiliser async comme [Cheena Malhotra, lead developer at US-based Magnitude Software,] recommandé, mais c’est un refactor massif pour nous. … Nous envisageons également de revenir à Windows car il semble que cela résoudrait le problème ici? “

    Une solution pour le problème n ° 659 s’est avérée tout aussi illusoire. Il semble y avoir un certain espoir que les modifications soumises par Malhotra puissent fonctionner, mais ces modifications semblent nécessiter un examen et des tests supplémentaires avant d’être déployées.

    Pour aider à identifier les situations où les choses tournent mal, Alessio Franceschelli, ingénieur principal senior chez Trainline au Royaume-Uni, a créé un simulateur conteneurisé pour le SqlClient à l’aide de docker-compose.

    Prenez un siège et du pop-corn. Cela peut prendre un certain temps. ®

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *