Bug #2010
qommon.storage._atomic_write ne doit pas écrire dans le même répertoire que celui contenant le fichier final
100%
Description
Quand _atomic_write
écrit dans le même répertoire que celui contenant le fichier final le fichier temporaire pourra gêner la lecture de tous les fichiers du répertoire ex. StorableObject.values()
faisant crasher temporairement l'application et en cas de crash au même moment le fichier ne sera jamais supprimé, bloquant durablement le fonctionnement.
Un correctif est de créer un répertoire .tmp
dans le même répertoire et de créer ces nouveaux fichiers dans ce répertoire.
Une autre possibilité aurait été de créer des fichiers commençant par un '.' ceux-ci étant ignorés par StorableObject
lors du parcours des répertoires de pickle
.
Fichiers
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a plus de 11 ans
- Fichier
0001-workflows-allow-marking-a-status-as-terminal.patchsupprimé
Mis à jour par Benjamin Dauvergne il y a plus de 11 ans
- Fichier 0001-qommon-storage-in-_atomic_write-do-not-create-temp-f.patch 0001-qommon-storage-in-_atomic_write-do-not-create-temp-f.patch ajouté
avec le bon patch c'est mieux.
Mis à jour par Frédéric Péters il y a plus de 11 ans
Ce serait mieux avec un ., non ? Ou plutôt que créer ça dans un .tmp/, créer ça dans ../ ? (c'est histoire d'éviter le os.path.exists() et le try/except)
Mis à jour par Benjamin Dauvergne il y a plus de 11 ans
- Fichier 0001-qommon-storage-in-_atomic_write-do-not-create-temp-f.patch 0001-qommon-storage-in-_atomic_write-do-not-create-temp-f.patch ajouté
Ok pour dans le même répertoire avec un .
. Dans ../
ça me gène un peu; à la rigueur dans ../tmp/
mais ça ne règle pas ton problème du os.path.exists()
mais à mon avis on en est pas à optimiser un stat()
en plus ou en moins, on a d'autres problèmes de performance avant.
Un autre problème avec ..
ou ../tmp/
c'est que selon le répertoire où on utilise _atomic_write
je n'ai aucun garantie que ..
ou ../tmp/
soient sur le même filesystem, et dans ce cas os.rename
ne marche pas. Bon on le saura tout de suite avec un OSError.errno == EXDEV
mais bon.
Mis à jour par Benjamin Dauvergne il y a plus de 11 ans
- Fichier 0001-qommon-storage-in-_atomic_write-create-temp-files-so.patch 0001-qommon-storage-in-_atomic_write-create-temp-files-so.patch ajouté
Avec un autre message de commit.
Mis à jour par Frédéric Péters il y a plus de 11 ans
- Statut changé de Nouveau à Solution déployée
Le patch est ok, son libellé trop long, je proposerais "storage: fix _atomic_write to create hidden temporary files (#2010)". (c'est utile de garder la référence au ticket dans le commit).
Mis à jour par Thomas Noël il y a plus de 11 ans
- Statut changé de Solution déployée à Résolu (à déployer)
Mis à jour par Frédéric Péters il y a plus de 10 ans
- Statut changé de Résolu (à déployer) à Fermé
storage: fix _atomic_write to create hidden temporary files (#2010)