Development #64485
utiliser un système de verrou explicite pour empêcher des actions multiples sur un même identifiant (email par exemple)
0%
Description
Ça fait suite au ticket #63647 où on a plusieurs requête de retour de FranceConnect qui tente de créer le même utilisateur avec le même email et se marchent dessus; il faut sérialiser ces requêtes (qu'elle s'exécutent l'une après l'autre et pas en parallèle), et pour ça le plus simple est de les faire dans une transaction et de poser un verrou sur quelque chose. En SQL pour éviter un verrou trop gros sur une table le mieux est de verrouiler une ligne de table avec .select_for_update()
pour cela ce ticket introduit un modèle Lock avec une simple colonne name unique.
Demandes liées
Historique
Mis à jour par Benjamin Dauvergne il y a environ 2 ans
- Bloque Bug #63647: DatabaseError: Save with update_fields did not affect any rows. ajouté
Mis à jour par Benjamin Dauvergne il y a environ 2 ans
- Fichier 0001-misc-add-lock-model-64485.patch ajouté
- Fichier 0002-misc-use-lock-on-email-when-creating-user-instances-.patch ajouté
- Fichier 0003-misc-delete-unused-safe_get_or_create-64485.patch ajouté
- Patch proposed changé de Non à Oui
Mis à jour par Benjamin Dauvergne il y a environ 2 ans
- Fichier
0001-misc-add-lock-model-64485.patchsupprimé
Mis à jour par Benjamin Dauvergne il y a environ 2 ans
- Fichier
0002-misc-use-lock-on-email-when-creating-user-instances-.patchsupprimé
Mis à jour par Benjamin Dauvergne il y a environ 2 ans
- Fichier
0003-misc-delete-unused-safe_get_or_create-64485.patchsupprimé
Mis à jour par Benjamin Dauvergne il y a environ 2 ans
- Statut changé de Nouveau à Solution proposée
Version sur la branche à jour.
Mis à jour par Paul Marillonnet il y a presque 2 ans
- Statut changé de Solution proposée à Solution validée
Oui ok bien plus simple que le safe_get_or_create
. J’ai l’impression qu’avec le passage en django 3.2 on pourra ici utiliser le paramètre no_key
de select_for_update
, par exemple pour lock_email
on peut passer no_key=True
. Rien à redire sinon. Ack.
Mis à jour par Benjamin Dauvergne il y a presque 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 02f0952f9cb07bd7078889d2815c4a8ae0ade374 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Fri Apr 22 18:21:47 2022 +0200 misc: delete unused safe_get_or_create (#64485) Introduced in #60658 it used a global lock on model's table to prevent multiple access, using the Lock model is simpler and more efficient. commit 362b4cbc0c0091ae0fd4b43fceb453915d112677 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Thu Apr 7 23:37:17 2022 +0200 misc: use lock on email when creating user instances (#64485) commit e555ca5a0ab7d1aacf40996d31a36c5ef2d238a9 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Thu Apr 7 23:03:50 2022 +0200 misc: add lock model (#64485)
Mis à jour par Transition automatique il y a presque 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
misc: add lock model (#64485)