Projet

Général

Profil

Bug #2010

qommon.storage._atomic_write ne doit pas écrire dans le même répertoire que celui contenant le fichier final

Ajouté par Benjamin Dauvergne il y a plus de 11 ans. Mis à jour il y a plus de 8 ans.

Statut:
Fermé
Priorité:
Immediat
Assigné à:
-
Version cible:
-
Début:
22 novembre 2012
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Planning:

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

Révision b3a715a3 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 11 ans

storage: fix _atomic_write to create hidden temporary files (#2010)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a plus de 11 ans

Il faudrait l'appliquer en prod vite.

#2

Mis à jour par Benjamin Dauvergne il y a plus de 11 ans

  • Fichier 0001-workflows-allow-marking-a-status-as-terminal.patch supprimé
#4

Mis à jour par Thomas Noël il y a plus de 11 ans

  • Version cible mis à Au-quotidien 2012.3
#5

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)

#6

Mis à jour par Benjamin Dauvergne il y a plus de 11 ans

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.

#8

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).

#9

Mis à jour par Thomas Noël il y a plus de 11 ans

commité (y compris 2012.3)

#10

Mis à jour par Thomas Noël il y a plus de 11 ans

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

Mis à jour par Frédéric Péters il y a presque 11 ans

  • % réalisé changé de 0 à 100
#12

Mis à jour par Frédéric Péters il y a plus de 10 ans

  • Statut changé de Résolu (à déployer) à Fermé
#13

Mis à jour par Thomas Noël il y a plus de 8 ans

  • Version cible Au-quotidien 2012.3 supprimé

Formats disponibles : Atom PDF