Projet

Général

Profil

Bug #67834

pas de remontée sentry sur des erreurs de transaction (exception psycopg2.InternalError)

Ajouté par Thomas Noël il y a presque 2 ans. Mis à jour il y a plus d'un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
29 juillet 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Vu tout à l'heure, des traces reçues par mail :

Exception:
  type = '<class 'psycopg2.InternalError'>', value = 'current transaction is aborted, commands ignored until end of transaction block
'

Stack trace (most recent call first):
  File "/usr/lib/python3/dist-packages/wcs/sql.py", line 2670, in store
  2668                 ' AND '.join(where_clauses),
  2669             )
> 2670             cur.execute(sql_statement, sql_dict)
  2671             if cur.fetchone() is None:
  2672                 if len(where) > 1:

qui n'ont pas donné lieu à des messages dans sentry.

Ce ticket pour comprendre et boucher ce trou.


Fichiers

Révisions associées

Révision b761fbf1 (diff)
Ajouté par Nicolas Roche il y a plus d'un an

misc: send frontoffice exceptions to sentry too (#67834)

Historique

#2

Mis à jour par Nicolas Roche il y a plus d'un an

Pour moi les sentry ne sont envoyées que depuis le backoffice.
Voici un patch pour avoir aussi cette exception traitée en front,
testé via cette sentry :
https://sentry.entrouvert.org/entrouvert/publik/issues/62683

#3

Mis à jour par Benjamin Dauvergne il y a plus d'un an

Je ne vois pas pourquoi tu spécialises ainsi, en fait on a aucune exception ne remonte dans sentry dès qu'elle passe dans le cas Exception ici, c'est le cas Exception qu'il faut chopper.

Actuellement ça remonte (faut regarder le champ mechanism) :
  • quand c'est dans un thread
  • dans le cas template géré à la main
  • dans le ou ça arrive après comme un middleware django, tant que ça remonte au handler de requête c'est bon

En fait on en manque un bon paquet (et il y a aussi tout ce qui est logger avec logged_errors qui ne remonte pas, mais ça c'est plus délicat).

#4

Mis à jour par Benjamin Dauvergne il y a plus d'un an

  • Statut changé de Solution proposée à En cours
#5

Mis à jour par Thomas Noël il y a plus d'un an

Benjamin Dauvergne a écrit :

En fait on en manque un bon paquet (et il y a aussi tout ce qui est logger avec logged_errors qui ne remonte pas, mais ça c'est plus délicat).

C'est assez normal à mon sens : les logged_errors sont destinées au administrateurs fonctionnels et ne sont donc pas destinées à remonter dans sentry.

#6

Mis à jour par Benjamin Dauvergne il y a plus d'un an

Thomas Noël a écrit :

Benjamin Dauvergne a écrit :

En fait on en manque un bon paquet (et il y a aussi tout ce qui est logger avec logged_errors qui ne remonte pas, mais ça c'est plus délicat).

C'est assez normal à mon sens : les logged_errors sont destinées au administrateurs fonctionnels et ne sont donc pas destinées à remonter dans sentry.

On est HS (je demande juste à chopper toutes les Exception et pas juste celle de psycopg2 au niveau du gestionnaire de requête) mais:

En théorie ce serait super, en pratique je ne suis pas certain qu'on soit exclusivement sur des erreurs de niveau fonctionnel "admin fonctionnel" et que dans ce cas le délais de traitement soit raisonnable, "l'admin fonctionnel le repère, il ouvre un ticket, etc...". Les traces qu'on reçoit via sentry/mail (voir le souci de date) on les traite plus vite en général (le cas dmy/mdy par exemple).

#7

Mis à jour par Frédéric Péters il y a plus d'un an

Il ne faut pas remonter les "logged errors" vers Sentry. Tout patch qui ferait ça serait rejeté.

#8

Mis à jour par Nicolas Roche il y a plus d'un an

faut regarder le champ mechanism

(je ne l'ai pas trouvé)

je demande juste à chopper toutes les Exception et pas juste celle de psycopg2 au niveau du gestionnaire de requête

J'ai fait ça (https://sentry.entrouvert.org/entrouvert/publik/issues/62685/)

#9

Mis à jour par Frédéric Péters il y a plus d'un an

compat:

Il y a peut-être la fausse idée comme quoi le préfixe d'un message de commit devrait correspondre au nom de fichier. Ce n'est pas le cas. "compat:" ça serait par exemple pour indiquer un commit qui touche à une question de compatibilité. Ça n'est pas le cas ici.

add foreground

tu as sans doute voulu écrire frontoffice.

~~

Sur le patch; le traitement des exceptions se fait actuellement dans finish_failed_request, voire log_internal_error, il ne faut pas avoir un bout pour sentry dans compat.py et un bout pour les mails ailleurs.

Pour boucler sur le début de mon commentaire : compat indique que ce fichier est une couche de compatibilité, entre django et quixote, il faut éviter d'y ajouter des fonctionnalités.

Alors oui il y a actuellement déjà

            if can_sentry():
                sentry_sdk.capture_exception(exc)

dans ce fichier pour une autre situation.

Mais celle-là aurait également été gérée dans finish_failed_request() ce ticket n'existerait même pas.

#10

Mis à jour par Benjamin Dauvergne il y a plus d'un an

Nicolas Roche a écrit :

faut regarder le champ mechanism

(je ne l'ai pas trouvé)

C'est uniquement sur les trace qui ne sont pas capturées par un mécanisme explicite de sentry (donc pas les trace dans les templates justement), ça en laisse quelques unes quand même.

#11

Mis à jour par Benjamin Dauvergne il y a plus d'un an

Frédéric Péters a écrit :

Alors oui il y a actuellement déjà

[...]

dans ce fichier pour une autre situation.

Mais celle-là aurait également été gérée dans finish_failed_request() ce ticket n'existerait même pas.

En plus clair je crois que Fred t'indique de travailler plutôt dans finish_failed_request() et de supprimer les références explicites à sentry ailleurs (l'exception est disponible dans finish_failed_request via sys.exc_info).

#13

Mis à jour par Frédéric Péters il y a plus d'un an

Il faut faire ça après le

        if exc_type is NotImplementedError:

basiquement, au niveau de log_internal_error.

#15

Mis à jour par Frédéric Péters il y a plus d'un an

  • Statut changé de Solution proposée à Solution validée
#16

Mis à jour par Frédéric Péters il y a plus d'un an

  • Statut changé de Solution validée à Résolu (à déployer)
commit b761fbf1345359d728cc15dc3f092105c7eb6310
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Fri Aug 5 11:46:57 2022 +0200

    misc: send frontoffice exceptions to sentry too (#67834)
#17

Mis à jour par Transition automatique il y a plus d'un an

  • Statut changé de Résolu (à déployer) à Solution déployée
#18

Mis à jour par Transition automatique il y a plus d'un an

Automatic expiration

Formats disponibles : Atom PDF