Development #53367
api: réessayer fillslot() en cas d'exception IntegrityError sur la création d'un Event
0%
Description
Lors de la réservation d'un rendez-vous et en cas de forte affluence on peut avoir dans fillslot() un créneau qui semble disponible au moment du get_all_slots() mais qui ne l'est plus lors de la création de l'objet Event, dans ce cas l'exception IntegrityError est levé à cause de l'index d'exclusion sur les intervals [start_datetime, _end_datetime]
.
C'est une situation type d'"optimistic concurrency control", la seul chose à faire c'est de défaire ce qui a pu être faire (en créant les Event dans une transaction) et de recommencer du début l'appel fillslot(). Pour éviter une boucle on ajoutera un paramètre retry.
PS: ce n'est pas une erreur qu'on voit en vrai mais une erreur qui apparaît dès qu'on fait un test de charge comme le test introduit dans le premier commit; ça me semble donc important si on veut travailler sur les performances en général.
Fichiers
Demandes liées
Historique
Mis à jour par Benjamin Dauvergne il y a presque 3 ans
- Fichier 0002-api-restart-fillslot-on-IntegrityError-53367.patch 0002-api-restart-fillslot-on-IntegrityError-53367.patch ajouté
- Fichier 0001-tests-add-api-tests-with-heavy-concurrency-53367.patch 0001-tests-add-api-tests-with-heavy-concurrency-53367.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Benjamin Dauvergne il y a presque 3 ans
- Statut changé de Solution proposée à En cours
Mis à jour par Benjamin Dauvergne il y a presque 3 ans
- Fichier 0002-api-restart-fillslot-on-IntegrityError-53367.patch 0002-api-restart-fillslot-on-IntegrityError-53367.patch ajouté
- Fichier 0001-tests-add-api-tests-with-heavy-concurrency-53367.patch 0001-tests-add-api-tests-with-heavy-concurrency-53367.patch ajouté
- Statut changé de En cours à Solution proposée
Mis à jour par Frédéric Péters il y a presque 3 ans
Cette branche est invivable pour jenkins (jobs récents après 1 jour, 6 heures, et 51 minutes pour le dernier que je viens de voir rouge et couper).
Mis à jour par Benjamin Dauvergne il y a presque 3 ans
Frédéric Péters a écrit :
Cette branche est invivable pour jenkins (jobs récents après 1 jour, 6 heures, et 51 minutes pour le dernier que je viens de voir rouge et couper).
Ok, c'est corrigé.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution proposée à Nouveau
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Assigné à
Benjamin Dauvergnesupprimé
Je me débranche de ce ticket, je préfère laisser ça à la la team chrono.
Mis à jour par Benjamin Dauvergne il y a environ un an
- Statut changé de Nouveau à Fermé
Intégré et corrigé dans #67053.
Mis à jour par Benjamin Dauvergne il y a environ un an
- Lié à Bug #67053: IntegrityError: conflicting key value violates exclusion constraint "tstzrange_constraint" ajouté