Development #71455
Passer les form_tokens dans la base de données
0%
Description
Même logique que #71441, sauf que c'est vraiment eux qui provoquent l'iowait apparemment (j'étais dans l'idée que les sessions étaient dans la base de données et pas sur disque, et donc que clean_session ne pouvait pas faire les IOs)
On a actuellement dans la base une table représentant les sessions, mais les form_tokens sont stockés sur disque.
Étant donné qu'un form_tokens est nécessairement associé à une session, on a deux options pour les représenter en base:
- soit ajouter une colonne form_tokens varchar[] à sessions (et comme on cherche toujours un form_tokens par rapport à une session, on n'aurait même pas à l'indexer)
- soit créer une table à part pour ça, de type session_id, form_token_id, timestamp
Je note que le code de Quixote limite à 10 le nombre de form_tokens par session, rendant l'idée d'une colonne varchar[] plus légère et plus intéressante.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Pierre Ducroquet il y a plus d'un an
- Lié à Development #71441: Passer les nonces dans la base de données ajouté
Mis à jour par Pierre Ducroquet il y a plus d'un an
En creusant l'historique, je comprends que l'implémentation actuelle avec des fichiers sert à forcer une forme d'atomicité. Entre la vérification et l'enregistrement de la session, il pouvait s'écouler trop de temps, rendant trop probable un doublon.
Du coup la seule réponse à ça serait d'avoir une table à part, dans laquelle on ferait une insertion immédiatement.
Mis à jour par Frédéric Péters il y a plus d'un an
- Assigné à changé de Pierre Ducroquet à Frédéric Péters
Je m'occuperai de ça.
Mis à jour par Frédéric Péters il y a plus d'un an
- Fichier 0001-misc-use-database-to-store-form-tokens-71455.patch 0001-misc-use-database-to-store-form-tokens-71455.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Je m'occuperai de ça.
Et transient_data fournit déjà une table qui assure un lien entre un jeton et une session, je l'utilise donc, au plus simple. (je ne reprends pas la limite au nombre de form_tokens par session)
Mis à jour par Pierre Ducroquet il y a plus d'un an
Est-ce-que le même patch ne devrait pas aussi gérer la "migration" de l'existant (importer en base les données si requis, et surtout supprimer les anciens dossiers) ?
Mis à jour par Frédéric Péters il y a plus d'un an
Non, on est sur de l'info vraiment temporaire, au pire le lendemain matin quelqu'un qui n'aurait pas fermé sa session aura un message lui disant de cliquer à nouveau sur le bouton. (position adoptée sur des précédentes migrations de ce type, et pareil pour les fichiers résidus)
Mis à jour par Frédéric Péters il y a plus d'un an
- Fichier 0001-misc-use-database-to-store-form-tokens-71455.patch 0001-misc-use-database-to-store-form-tokens-71455.patch ajouté
Patch actualisé pour y ajouter une migration qui fait la suppression des fichiers (rebasée sur la migration ajoutée par #72096).
Mis à jour par Pierre Ducroquet il y a plus d'un an
- Statut changé de Solution proposée à Solution validée
Mis à jour par Frédéric Péters il y a plus d'un an
- Statut changé de Solution validée à Résolu (à déployer)
Rebasé pour augmenter le numéro de migration,
commit c41f4a1303b2a8e4bc39553b4c198348b32b32fd Author: Frédéric Péters <fpeters@entrouvert.com> Date: Thu Dec 8 20:32:52 2022 +0100 misc: use database to store form tokens (#71455)
Mis à jour par Transition automatique il y a plus d'un an
- Statut changé de Résolu (à déployer) à Solution déployée
misc: use database to store form tokens (#71455)