r1478 - trunk/simexplorer-is/src/site/fr/rst
Author: glandais Date: 2008-04-16 13:36:50 +0000 (Wed, 16 Apr 2008) New Revision: 1478 Modified: trunk/simexplorer-is/src/site/fr/rst/rules.rst Log: Rules of storage service Modified: trunk/simexplorer-is/src/site/fr/rst/rules.rst =================================================================== --- trunk/simexplorer-is/src/site/fr/rst/rules.rst 2008-04-16 13:36:28 UTC (rev 1477) +++ trunk/simexplorer-is/src/site/fr/rst/rules.rst 2008-04-16 13:36:50 UTC (rev 1478) @@ -153,3 +153,71 @@ Un nouveau mot de passe peut être généré si l'administrateur possède les droits d'administration sur cet utilisateur. Un mail est alors envoyé à l'adresse de l'utilisateur. +Storage +------- + +Suppression +~~~~~~~~~~~ + +La suppression sans spécifier la version revient à supprimer toutes les versions. +On vérifiera alors que toutes les versions peuvent être supprimées avant de procéder à la suppression en elle même. + +Un élément peut être supprimé si et seulement si l'une des conditions suivantes est respectée : + - l'élément est une exploration d'application + - l'élement est un ensemble de données d'exploration ou un composant, et que celui ci n'est utilisé + que par une seule exploration d'application au plus. + - l'élément n'est pas d'un des types pré cités, et que celui-ci n'est utilisé par aucun autre élément. + +=> un élement qui va être supprimé peut avoir au maximum un seul parent. + +Lors de la suppression d'un ensemble de données d'exploration ou d'un composant, si l'élément a un parent de type +exploration d'application, celui ci est supprimé. + +La suppression est ensuite effectuée en supprimant l'élément ainsi que tous ses enfants qui étaient utilisés uniquement par sa descendance directe. +La méthode réalisant cette suppression en cascade est implentée de façon récursive, soit ES l'élément à supprimer, et E l'élément traité dans la méthode. +On initialise la suppression par un getDeletableChildren(ES) : +Dans cette méthode, si E a un parent au plus : + - E est marqué comme étant à être supprimé (toujours le cas pour ES) + - pour tous les éléments utilisés par E, on appele la méthode récursivement getDeletableChildren(E.enfant(i)) +Les éléments marqués comme étant à supprimer sont alors véritablement effacés. + +Sauvegarde +~~~~~~~~~~ + +On va dans cette procédure sauvegarder un LoggableElement et ses attachments. On ne connait pas à priori si l'élément +est présent dans le service de stockage. + +Si l'élément ne contient aucune méta données (typiquement en provenance de SimExplorer sur un nouvel élément), on créé +des méta données par défaut (UUID, version à 1, date de création). +Dans tous les cas, on met à jour les métadonnées avec les données intrinsèques de l'élément (nom, description, type, hash, etc). + +Dans un premier temps, on regarde si l'élément existe déjà en base, de façon exacte ou non. + +On récupère donc le metadata du dernier élément avec le même uuid. Pour cela, on compare les hash si ils existent. +Si ils ne sont pas égaux (ou qu'aucun élément existe avec cet uuid), on continue la création (on crééra la bonne version le moment venu (TODO ref)). + +Si les deux hash des éléments sont égaux, on vérifie l'égalité de façon explicite (deux élément différents peuvent avoir le même hash). +Si le test d'égalite écoue, la création continue, les éléments sont différents. + +A ce stade, les éléments sont strictement égaux. La création est annulée. Mais les versions peuvent être différentes. +Il est alors nécessaire de synchroniser les versions, entre celle qui est reçue et celle qui est déjà stockée. + + - les deux versions sont égales : on ne mets rien à jour. + - la version en base est supérieure à celle fournie, la base n'est pas modifié. Cependant, la version de la métadonnée de l'élément + à sauvegarder est mise à jour. Cette mise à jour doit être traitée par la méthode appelant la sauvegarde (TODO ref). + - si la version en base est inférieure à celle à sauvegarder, on vérifie que l'utilisateur peut créer une nouvelle version de l'élément + - si non, l'élément sera sauvée avec nouvel UUID, mais on ne s'en occupe pas pour le moment (TODO ref). + - si oui, on duplique le dernier élément en base, en lui affectant la version de l'élément en cours de sauvegarde + +Si l'élément est à créer (ie le dernier élément en base est différent de celui en cours d'enregistrement), +on traite tout d'abord le problème des versions. + +L'élément en cours de création est toujours le dernier. +Ensuite, on regarde si une autre version existe déjà : + - si non, aucun traitement n'est requis, on utilise la version spécifiée + - si oui, on vérifie que l'utilisateur a le droit de créer une nouvelle version : + - si oui, on met à jour le précédent en le spécifiant comme "n'étant pas la dernière version" + - si oui, on incrémente la version de l'élément en cours de sauvegarde si nécessaire + - si non, on créée un nouvel élément (ie un nouvel UUID) + - dans tous les cas, on stocke les informations sur le parent en version +
participants (1)
-
glandais@users.labs.libre-entreprise.org