Development #31204
Les logs dans des blocs atomiques qui échouent ne sont pas conservés (rollback)
0%
Description
Parce qu'on utilise la même connection pour les logs et pour la transaction, si
la transaction foire les logs aussi.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
- Sujet changé de :es requêtes HTTP dans des blocs atomic() ne seront pas loggés à Les requêtes HTTP dans des blocs atomic() ne seront pas loggés
C'est idiot ce que je raconte, ça ne peut pas marcher avec on_commit
il faut quelque chose qui s'exécute quelque soit l'état de la transaction bien sûr.
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
- Fichier 0004-views-wraps-GenericEndpointView.dispatch-with-deferr.patch 0004-views-wraps-GenericEndpointView.dispatch-with-deferr.patch ajouté
- Fichier 0003-base-use-deferrable-to-create-ResourceLog-objects-31.patch 0003-base-use-deferrable-to-create-ResourceLog-objects-31.patch ajouté
- Fichier 0001-utils-add-defer-module-to-run-things-later-31204.patch 0001-utils-add-defer-module-to-run-things-later-31204.patch ajouté
- Fichier 0002-utils-prevent-import-loop-31204.patch 0002-utils-prevent-import-loop-31204.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Frédéric Péters il y a environ 5 ans
Je trouve bizarre d'un point de vue "langue" d'appeler "@deferred" ce qui se pose dans 0004, ça me semble plutôt être "@ici les trucs qui auraient été marqués @deferrable à l'intérieur verront leurs fins", sans être tout à fait séduit, quelque chose dans la direction de @deferrable_barrier ?
(ou alors je n'ai pas compris le sens du patch)
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
Frédéric Péters a écrit :
Je trouve bizarre d'un point de vue "langue" d'appeler "@deferred" ce qui se pose dans 0004, ça me semble plutôt être "@ici les trucs qui auraient été marqués @deferrable à l'intérieur verront leurs fins", sans être tout à fait séduit, quelque chose dans la direction de @deferrable_barrier ?
(ou alors je n'ai pas compris le sens du patch)
Pas mieux, mes limites en matière de vocabulaire anglais sont atteintes :) deferrable_zone/block sinon.
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
- Fichier 0004-views-wraps-GenericEndpointView.dispatch-with-deferr.patch 0004-views-wraps-GenericEndpointView.dispatch-with-deferr.patch ajouté
- Fichier 0003-base-use-deferrable-to-create-ResourceLog-objects-31.patch 0003-base-use-deferrable-to-create-ResourceLog-objects-31.patch ajouté
- Fichier 0001-utils-add-defer-module-to-run-things-later-31204.patch 0001-utils-add-defer-module-to-run-things-later-31204.patch ajouté
- Fichier 0002-utils-prevent-import-loop-31204.patch 0002-utils-prevent-import-loop-31204.patch ajouté
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
- Fichier 0004-views-wraps-GenericEndpointView.dispatch-with-deferr.patch 0004-views-wraps-GenericEndpointView.dispatch-with-deferr.patch ajouté
- Fichier 0003-base-use-deferrable-to-create-ResourceLog-objects-31.patch 0003-base-use-deferrable-to-create-ResourceLog-objects-31.patch ajouté
- Fichier 0001-utils-add-defer-module-to-run-things-later-31204.patch 0001-utils-add-defer-module-to-run-things-later-31204.patch ajouté
- Fichier 0002-utils-prevent-import-loop-31204.patch 0002-utils-prevent-import-loop-31204.patch ajouté
Rebasé.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier 0004-views-wraps-GenericEndpointView.dispatch-with-deferr.patch 0004-views-wraps-GenericEndpointView.dispatch-with-deferr.patch ajouté
- Fichier 0003-base-use-deferrable-to-create-ResourceLog-objects-31.patch 0003-base-use-deferrable-to-create-ResourceLog-objects-31.patch ajouté
- Fichier 0001-utils-add-defer-module-to-run-things-later-31204.patch 0001-utils-add-defer-module-to-run-things-later-31204.patch ajouté
- Fichier 0002-utils-prevent-import-loop-31204.patch 0002-utils-prevent-import-loop-31204.patch ajouté
Rebasé.
Mis à jour par Benjamin Dauvergne il y a plus de 4 ans
- Fichier 0004-views-wraps-GenericEndpointView.dispatch-with-deferr.patch 0004-views-wraps-GenericEndpointView.dispatch-with-deferr.patch ajouté
- Fichier 0003-base-use-deferrable-to-create-ResourceLog-objects-31.patch 0003-base-use-deferrable-to-create-ResourceLog-objects-31.patch ajouté
- Fichier 0001-utils-add-defer-module-to-run-things-later-31204.patch 0001-utils-add-defer-module-to-run-things-later-31204.patch ajouté
- Fichier 0002-utils-prevent-import-loop-31204.patch 0002-utils-prevent-import-loop-31204.patch ajouté
Rebasé.
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Fichier 0002-base-use-deferrable-to-create-ResourceLog-objects-31.patch 0002-base-use-deferrable-to-create-ResourceLog-objects-31.patch ajouté
- Fichier 0003-views-wraps-GenericEndpointView.dispatch-with-deferr.patch 0003-views-wraps-GenericEndpointView.dispatch-with-deferr.patch ajouté
- Fichier 0001-utils-add-defer-module-to-run-things-later-31204.patch 0001-utils-add-defer-module-to-run-things-later-31204.patch ajouté
Rebasé.
Mis à jour par Nicolas Roche il y a environ 4 ans
- views.py : le décorateur
deferrable_barrier
surdispatch()
fait entrer les endpoints dans le gestionnaire de contexte. - base/models.py@ : le décorateur
deferrable
diffère l’enregistrement d'un nouvel objetRessourceLog
,- si les prédicats sont vérifiées (ou s'il n'y en a pas)
- et si l'on est préalablement entré dans le gestionnaire de contexte
En l'état, les prédicats ne sont pas utilisés, et donc les logs sur les endpoints sont tous différés.)
2 petites remarques sur la forme :- Mettre le copyright en 2020 :
Copyright (C) 2019 Entr'ouvert
- Pour moi ça aurait été plus compréhensible d'avoir des
push/pop
traitaient les fonctions différées plutôt que le contexte du gestionnaire (peut-être que la pratique est de mettre en avant la gestion du contexte, mais cela m'a d'abord surpris).
Mis à jour par Nicolas Roche il y a presque 4 ans
Je me répond moi même :
En l'état, les prédicats ne sont pas utilisés, et donc les logs sur les endpoints sont tous différés.
Pas important car il n'y a que peu d'enregistrements de logs en base (pas de risque de consommation excessive de la mémoire).
Le code est bien testé et il vient discrètement s'ajouter à l'existant.
Selon moi il a peu de risque de casser l'existant, ou d'en compliquer sa compréhension (même si j'avoue aussi avoir eu du mal avec le patch lui même et son vocabulaire).
Sauf contre-ordre, je serais bien tenté de valider ici...
- deferrable_barrier -> defferable_context
- deferrable_barrier.deferrable -> deferable_conntext.atexit
- deferrable_barrier.deferrable_if_in_transaction -> deferable_context.atexit_transaction
Mis à jour par Benjamin Dauvergne il y a presque 3 ans
- Fichier 0002-base-use-deferrable-to-create-ResourceLog-objects-31.patch 0002-base-use-deferrable-to-create-ResourceLog-objects-31.patch ajouté
- Fichier 0003-views-wraps-GenericEndpointView.dispatch-with-deferr.patch 0003-views-wraps-GenericEndpointView.dispatch-with-deferr.patch ajouté
- Fichier 0001-utils-add-defer-module-to-run-things-later-31204.patch 0001-utils-add-defer-module-to-run-things-later-31204.patch ajouté
Rebasé.
Mis à jour par Benjamin Dauvergne il y a plus d'un an
- Fichier 0002-base-use-deferrable-to-create-ResourceLog-objects-31.patch 0002-base-use-deferrable-to-create-ResourceLog-objects-31.patch ajouté
- Fichier 0003-views-wraps-GenericEndpointView.dispatch-with-deferr.patch 0003-views-wraps-GenericEndpointView.dispatch-with-deferr.patch ajouté
- Fichier 0001-utils-add-defer-module-to-run-things-later-31204.patch 0001-utils-add-defer-module-to-run-things-later-31204.patch ajouté
Rebasé et deferrable_barrier renommé en deferrable_scope.
Mis à jour par Benjamin Dauvergne il y a environ un an
Je savais bien que ça arriverait un jour, impossible de débugger le ticket toulouse lié parce que "pas de logs dans un bloc atomic qui échoue".
Mis à jour par Robot Gitea il y a environ un an
- Statut changé de Solution proposée à En cours
Benjamin Dauvergne (bdauvergne) a ouvert une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/passerelle/pulls/203
- Titre : WIP: logger en dehors des scopes atomic() (#31204)
- Modifications : https://git.entrouvert.org/entrouvert/passerelle/pulls/203/files
Mis à jour par Benjamin Dauvergne il y a environ un an
J'ai revu ça pour un truc beaucoup plus simple à utiliser et à relire.
Mis à jour par Benjamin Dauvergne il y a environ un an
- Statut changé de En cours à Solution proposée
Mis à jour par Benjamin Dauvergne il y a environ un an
- Sujet changé de Les requêtes HTTP dans des blocs atomic() ne seront pas loggés à Les logs dans des blocs atomiques qui échouent ne sont pas conservés (rollback)
Je renomme le ticket, ce sera plus clair pour tout le monde. Comme souvent l'erreur vient de ce qu'a retourné un web-service ou ce qu'on lui a envoyé, on se retrouve avec juste la trace, éventuellement agrémentée de variables locales, pour comprendre.
Mis à jour par Benjamin Dauvergne il y a 6 mois
- Lié à Development #82378: Avoir les logs des appels HTTP sur les jobs (avec un bloc atomic qui rollback) ajouté
Mis à jour par Robot Gitea il y a 6 mois
- Statut changé de Solution proposée à En cours
Nicolas Roche (nroche) a relu et demandé des modifications sur une pull request sur Gitea concernant cette demande :
Mis à jour par Robot Gitea il y a 6 mois
- Statut changé de Solution proposée à Solution validée
Nicolas Roche (nroche) a approuvé une pull request sur Gitea concernant cette demande :
Mis à jour par Robot Gitea il y a 6 mois
- Statut changé de Solution validée à Résolu (à déployer)
Benjamin Dauvergne (bdauvergne) a mergé une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/passerelle/pulls/203
- Titre : logger en dehors des scopes atomic() (#31204)
- Modifications : https://git.entrouvert.org/entrouvert/passerelle/pulls/203/files
Mis à jour par Transition automatique il y a 6 mois
- Statut changé de Résolu (à déployer) à Solution déployée
utils: add tools to execute actions outisde of transactions (#31204)
First use of it is to create ResourceLog objects after the current
transaction commit or abort.