Projet

Général

Profil

Development #64485

utiliser un système de verrou explicite pour empêcher des actions multiples sur un même identifiant (email par exemple)

Ajouté par Benjamin Dauvergne il y a environ 2 ans. Mis à jour il y a presque 2 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Bloque Authentic 2 - Bug #63647: DatabaseError: Save with update_fields did not affect any rows.Fermé07 avril 2022

Actions

Révisions associées

Révision e555ca5a (diff)
Ajouté par Benjamin Dauvergne il y a presque 2 ans

misc: add lock model (#64485)

Révision 362b4cbc (diff)
Ajouté par Benjamin Dauvergne il y a presque 2 ans

misc: use lock on email when creating user instances (#64485)

Révision 02f0952f (diff)
Ajouté par Benjamin Dauvergne il y a presque 2 ans

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.

Historique

#1

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é
#2

Mis à jour par Benjamin Dauvergne il y a environ 2 ans

  • Assigné à mis à Benjamin Dauvergne
#3

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
#4

Mis à jour par Benjamin Dauvergne il y a environ 2 ans

  • Fichier 0001-misc-add-lock-model-64485.patch supprimé
#5

Mis à jour par Benjamin Dauvergne il y a environ 2 ans

  • Fichier 0002-misc-use-lock-on-email-when-creating-user-instances-.patch supprimé
#6

Mis à jour par Benjamin Dauvergne il y a environ 2 ans

  • Fichier 0003-misc-delete-unused-safe_get_or_create-64485.patch supprimé
#7

Mis à jour par Benjamin Dauvergne il y a environ 2 ans

  • Statut changé de Nouveau à Solution proposée

Version sur la branche à jour.

#9

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.

#10

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

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

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

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

Automatic expiration

Formats disponibles : Atom PDF