Projet

Général

Profil

Development #83027

Race condition sur la sauvegarde d'une session

Ajouté par Pierre Ducroquet il y a 6 mois. Mis à jour il y a 6 mois.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
02 novembre 2023
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

Description

Idem à #82951 mais pour les sessions.
Trace reçue, "Portail de démarches : [ERROR] psycopg2.errors.UniqueViolation: ERREUR: la valeur d'une clé dupliquée rompt la contrainte unique « sessions_pkey » DETAIL: La clé « (id)=(jGZHgxylESldi5-DR2piXA) » existe déjà."
Méthode Session::store :

        conn, cur = get_connection_and_cursor()
        column_names = sql_dict.keys()
        sql_statement = '''UPDATE %s SET %s WHERE id = %%(id)s RETURNING id''' % (
            self._table_name,
            ', '.join(['%s = %%(%s)s' % (x, x) for x in column_names]),
        )
        cur.execute(sql_statement, sql_dict)
        if cur.fetchone() is None:
            sql_statement = '''INSERT INTO %s (%s) VALUES (%s)''' % (
                self._table_name,
                ', '.join(column_names),
                ', '.join(['%%(%s)s' % x for x in column_names]),
            )
            cur.execute(sql_statement, sql_dict)

Révisions associées

Révision e2cb7054 (diff)
Ajouté par Pierre Ducroquet il y a 6 mois

sql: use upsert for session store (#83027)

This code has a race condition that has been triggered several times already.
Fixing it by relying on PostgreSQL UPSERT feature.

Historique

#1

Mis à jour par Robot Gitea il y a 6 mois

  • Statut changé de Nouveau à En cours

Pierre Ducroquet (pducroquet) a ouvert une pull request sur Gitea concernant cette demande :

#2

Mis à jour par Robot Gitea il y a 6 mois

  • Statut changé de En cours à Solution proposée
#3

Mis à jour par Robot Gitea il y a 6 mois

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

Thomas NOËL (tnoel) a approuvé une pull request sur Gitea concernant cette demande :

#4

Mis à jour par Robot Gitea il y a 6 mois

  • Statut changé de Solution validée à Résolu (à déployer)

Pierre Ducroquet (pducroquet) a mergé une pull request sur Gitea concernant cette demande :

#5

Mis à jour par Transition automatique il y a 6 mois

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

Mis à jour par Transition automatique il y a 4 mois

Automatic expiration

Formats disponibles : Atom PDF