Sobes.tech
Senior

Le service en production ne fonctionne pas de manière stable plus de 5 minutes. Nous avons réussi à localiser le problème : il y a une fonction P() dans une bibliothèque tierce qui, avec une certaine probabilité, provoque un panic. Comment résoudre ce problème ? La bibliothèque est open source, le code peut être consulté dans vendor.

sobes.tech IA

Réponse de l'IA

Si la fonction P() d'une bibliothèque externe provoque une panique avec une certaine probabilité, et que le code de la bibliothèque est ouvert, vous pouvez prendre les mesures suivantes :

  1. Envelopper l'appel à la fonction P() dans une construction recover pour intercepter la panique et empêcher tout le service de s'effondrer.

  2. Étudier le code de la fonction P() dans le vendor pour comprendre les causes de la panique — peut-être une erreur dans la logique ou une mauvaise utilisation.

  3. Si possible, corriger l'erreur dans la bibliothèque et la recompiler.

  4. Si la correction n'est pas possible ou prend du temps, vous pouvez écrire une enveloppe autour de P(), qui appellera la fonction en toute sécurité et gérera les erreurs.

Exemple d'enveloppe avec recover en Go :

func safeP() (err error) {
    defer func() {
        if r := recover(); r != nil {
            err = fmt.Errorf("panique capturée : %v", r)
        }
    }()
    P() // appel à la fonction problématique
    return nil
}

Ainsi, le service ne tombera pas à cause d'une panique, et il sera possible de journaliser et d'analyser les erreurs.