De service in productie draait niet stabiel langer dan 5 minuten. We zijn erin geslaagd het probleem te lokaliseren: er is een functie P() in een externe bibliotheek die met enige waarschijnlijkheid een panic veroorzaakt. Hoe los je dit probleem op? De bibliotheek is open source, de code kan worden bekeken in vendor.
sobes.tech AI
Antwoord van AI
Als de functie P() van een externe bibliotheek met enige waarschijnlijkheid een panic veroorzaakt en de code van de bibliotheek is open, kunnen de volgende stappen worden ondernomen:
-
Omring de aanroep van P() met een
recover-constructie om de panic op te vangen en te voorkomen dat de hele service crasht. -
Bestudeer de code van de functie P() in de vendor om de oorzaken van de panic te begrijpen — misschien is het een logicafout of verkeerd gebruik.
-
Indien mogelijk, corrigeer de fout in de bibliotheek en bouw deze opnieuw.
-
Als corrigeren niet mogelijk is of tijd kost, kun je een wrapper schrijven rond P() die de functie veilig aanroept en fouten afhandelt.
Voorbeeld van een wrapper met recover in Go:
func safeP() (err error) {
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("panic opgevangen: %v", r)
}
}()
P() // aanroep van de problematische functie
return nil
}
Op deze manier zal de service niet crashen door een panic, en kunnen fouten worden gelogd en geanalyseerd.