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.
Files
Related issues
Associated revisions
History
Updated by Pierre Ducroquet 3 months ago
- Related to Development #71441: Passer les nonces dans la base de données added
Updated by Pierre Ducroquet 3 months ago
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.
Updated by Frédéric Péters 2 months ago
- Assignee changed from Pierre Ducroquet to Frédéric Péters
Je m'occuperai de ça.
Updated by Frédéric Péters 2 months ago
- File 0001-misc-use-database-to-store-form-tokens-71455.patch 0001-misc-use-database-to-store-form-tokens-71455.patch added
- Status changed from Nouveau to Solution proposée
- Patch proposed changed from No to Yes
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)
Updated by Pierre Ducroquet about 2 months ago
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) ?
Updated by Frédéric Péters about 2 months ago
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)
Updated by Frédéric Péters about 1 month ago
- File 0001-misc-use-database-to-store-form-tokens-71455.patch 0001-misc-use-database-to-store-form-tokens-71455.patch added
Patch actualisé pour y ajouter une migration qui fait la suppression des fichiers (rebasée sur la migration ajoutée par #72096).
Updated by Pierre Ducroquet about 1 month ago
- Status changed from Solution proposée to Solution validée
Updated by Frédéric Péters about 1 month ago
- Status changed from Solution validée to 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)
Updated by Transition automatique about 1 month ago
- Status changed from Résolu (à déployer) to Solution déployée
misc: use database to store form tokens (#71455)