Bug #67053
IntegrityError: conflicting key value violates exclusion constraint "tstzrange_constraint"
0%
Description
https://sentry.entrouvert.org/entrouvert/publik/issues/62378/
IntegrityError: conflicting key value violates exclusion constraint "tstzrange_constraint" DETAIL: Key (desk_id, tstzrange(start_datetime, _end_datetime))=(218, ["2022-07-18 13:00:00+00","2022-07-18 13:30:00+00")) conflicts with existing key (desk_id, tstzrange(start_datetime, _end_datetime))=(218, ["2022-07-18 13:00:00+00","2022-07-18 13:30:00+00")). File "django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) IntegrityError: conflicting key value violates exclusion constraint "tstzrange_constraint" DETAIL: Key (desk_id, tstzrange(start_datetime, _end_datetime))=(218, ["2022-07-18 13:00:00+00","2022-07-18 13:30:00+00")) conflicts with existing key (desk_id, tstzrange(start_datetime, _end_datetime))=(218, ["2022-07-18 13:00:00+00","2022-07-18 13:30:00+00")). (21 additional frame(s) were not displayed) ... File "django/db/backends/utils.py", line 67, in execute return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) File "django/db/backends/utils.py", line 76, in _execute_with_wrappers return executor(sql, params, many, context) File "django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) File "django/db/utils.py", line 89, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value File "django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params)
Fichiers
Demandes liées
Révisions associées
api: fillslot & tstzrange_constraint, retry (#67053)
Historique
Mis à jour par Nicolas Roche il y a presque 2 ans
- Projet changé de Suivi des traces à Chrono
Le sentry pointe cette demande : https://formulaires.demarches.lenord.fr/backoffice/management/prise-de-rendez-vous-d-orientation/100735/
Mis à jour par Lauréline Guérin il y a presque 2 ans
- Fichier 0001-api-fillslot-tstzrange_constraint-return-an-APIError.patch 0001-api-fillslot-tstzrange_constraint-return-an-APIError.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Ca ne devrait pas se produire, puisqu'on vérifie avant de créer l'événement (pour un fillslot sur un agenda meetings), que le slot est bien libre. Mais possiblement entre le check de la dispo du slot, et la création de l'event, on peut avoir un autre appel à côté qui prend le slot. Et bam.
Du coup, j'ai déplacé un peu de code pour n'avoir qu'une transaction qui 1/ crée les events (dans le cas meeting) 2/ gère les résa
Cette transaction dans un try/except qui ne cible que la contrainte d'exclusion, avec une APIError à la fin (et oui, on est bien dans le cas où il n'y a pas de desk dispo pour le slot)
Mis à jour par Benjamin Dauvergne il y a presque 2 ans
J'avais déjà posé une solution dans #53367, abandonné par manque de relecteur.
Mis à jour par Valentin Deniaud il y a presque 2 ans
Ça serait drôlement plus clair en deux commits, genre 1/ retarder la création des évènements 2/ le fix (là le niveau d'indentation introduit par le try/except complique la lecture des lignes effectivement changées).
Mis à jour par Lauréline Guérin il y a presque 2 ans
- Fichier 0002-api-fillslot-tstzrange_constraint-retry-67053.patch 0002-api-fillslot-tstzrange_constraint-retry-67053.patch ajouté
- Fichier 0001-api-fillslots-create-events-in-the-transaction-67053.patch 0001-api-fillslots-create-events-in-the-transaction-67053.patch ajouté
- Assigné à mis à Lauréline Guérin
2 commits, et dans le second, j'ai ajouté le retry de #53367; car en effet, la première version évitait une 500 mais ne corrigeait pas le problème.
Mis à jour par Valentin Deniaud il y a presque 2 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Lauréline Guérin il y a presque 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 7ccc5cd1c0102d8ddf633309cdd5ef12cb54c983 Author: Lauréline Guérin <zebuline@entrouvert.com> Date: Thu Jul 21 11:30:06 2022 +0200 api: fillslot & tstzrange_constraint, retry (#67053) commit b17a2ee543dcb1c43b0f2b2d54fe36bf6568f4dc Author: Lauréline Guérin <zebuline@entrouvert.com> Date: Thu Jul 21 09:07:34 2022 +0200 api: fillslots, create events in the transaction (#67053)
Mis à jour par Transition automatique il y a presque 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Benjamin Dauvergne il y a environ un an
- Lié à Development #53367: api: réessayer fillslot() en cas d'exception IntegrityError sur la création d'un Event ajouté
api: fillslots, create events in the transaction (#67053)