Development #83027
Race condition sur la sauvegarde d'une session
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
Historique
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 :
- URL : https://git.entrouvert.org/entrouvert/wcs/pulls/807
- Titre : WIP: sql: use upsert for session store (#83027)
- Modifications : https://git.entrouvert.org/entrouvert/wcs/pulls/807/files
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 :
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 :
- URL : https://git.entrouvert.org/entrouvert/wcs/pulls/807
- Titre : sql: use upsert for session store (#83027)
- Modifications : https://git.entrouvert.org/entrouvert/wcs/pulls/807/files
Mis à jour par Transition automatique il y a 6 mois
- Statut changé de Résolu (à déployer) à Solution déployée
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.