Projet

Général

Profil

Bug #67053

IntegrityError: conflicting key value violates exclusion constraint "tstzrange_constraint"

Ajouté par Sentry Io il y a presque 2 ans. Mis à jour il y a presque 2 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Lié à Chrono - Development #53367: api: réessayer fillslot() en cas d'exception IntegrityError sur la création d'un EventFermé23 avril 2021

Actions

Révisions associées

Révision b17a2ee5 (diff)
Ajouté par Lauréline Guérin il y a presque 2 ans

api: fillslots, create events in the transaction (#67053)

Révision 7ccc5cd1 (diff)
Ajouté par Lauréline Guérin il y a presque 2 ans

api: fillslot & tstzrange_constraint, retry (#67053)

Historique

#1

Mis à jour par Nicolas Roche il y a presque 2 ans

  • Projet changé de Suivi des traces à Chrono
#2

Mis à jour par Lauréline Guérin il y a presque 2 ans

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)

#3

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.

#4

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).

#5

Mis à jour par Lauréline Guérin il y a presque 2 ans

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.

#6

Mis à jour par Valentin Deniaud il y a presque 2 ans

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

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)
#8

Mis à jour par Transition automatique il y a presque 2 ans

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

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

Automatic expiration

#10

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é

Formats disponibles : Atom PDF