WootEngine

Description générale

Intégration de données linéaires dans un contexte P2P

Le composant WootEngine permet d’intégrer des données linéaires, dans un contexte collaboratif (entre différents composants WootEngine) de façon répliquée. Ce composant assure la convergence des données entre différents sites, sans site central, sans consensus distribué, sans ordre total, ni vecteur d’état. Il doit se plugger à XWiki, qui lui fourni les modifications effectuées sur ses données ; à partir des modifications, le composant WootEngine génère un modèle interne (qu'il maintient en fonction des modifications locales ou distantes). Le composant WootEngine est basé sur l'algorithme Woot.

Un composant par nœud

Chaque application voulant synchroniser ses données avec le réseau collaboratif, doit utiliser un composant WootEngine pour pouvoir se synchroniser et intégrer les données.

Différentiation modèle / vue

Le composant WootEngine utilise un modèle interne représentant l'ensemble des données partagées. Ainsi, on appelle la vue, les données visibles par l'utilisateur à travers l'application d'édition (i.e. XWiki), et le modèle, ces mêmes données "transformées" par le composant WootEngine.

Utlisation d’un modèle d’opération

Le composant WootEngine utilise un ensemble d’opérations Woot pour assurer la convergence des données et maintenir son modèle interne. A chaque modification d’une page du site local, sont générées des opérations Woot, qui sont intégrées localement, puis fournies sous forme de patch Woot. Ce patch peut alors être envoyé à d’autres sites pour intégrer les modifications correspondantes.

Intégration d’opération ou de patch

Il existe deux types de modifications : les modifications locales, effectuées par les utilisateurs de l'application locale (i.e. l'application pluggée au composant WootEngine), et les modifications distantes, effectuées par les utilisateurs des applications connectées au réseau collaboratif. Lors de chaque modification locale, est généré un patch Woot contenant l'ensemble des opérations Woot correspondantes ; ce patch est ensuite fourni par le composant WootEngine pour qu'il soit transmis aux autres noeuds du réseau. Chaque nœud reçoit alors un patch Woot qu'il intègre localement à travers le composant WootEngine associé au noeud.

Interrogation du modèle interne

Chaque site doit régulièrement synchroniser sa vue avec le modèle du composant WootEngine. Pour ce faire, le composant fournit un ensemble de méthode permettant d'accéder (de manière lisible par l'application) au modèle.

Echange d’état

Le composant WootEngine permet aussi d’agir directement sur l’état du modèle. Ainsi, par l’intermédiaire d’un getter/setter, on peut récupérer/remplacer le modèle interne courant. Cette fonction peut être utilisée pour mettre à jour un composant WootEngine dont le modèle est vierge, en le remplaçant par celui d’un composant dont le modèle est à jour (i.e. échange d’état).

Serialisation du modèle interne

L’ensemble des pages stockées dans le modèle interne sont sérialisées dans des fichiers.

Composant

WootEngineComponent.jpg

Entrées

Méthode ins : insertion d’une donnée dans une page à une position absolue.

Méthode del : supression d’une unité atomique à une position absolue.

Méthode deliverPatch : application des opérations contenues dans un patch.

Méthode setState : remplacement de l’état courant du modèle par un état donnée.

Sorties

Méthodes ins/del : la méthode renvoie l’opération au format Woot correspondant à l’insertion effectuée.

Méthode getPage : récupération d’une page données au format String.

Méthode createPatch : création d’un patch à partir d’un vecteur d’opérations Woot.

Méthode getState : récupération de l’état courant du modèle interne (Zip des fichiers de sérialisation des données).

Diagramme de classe

WootEngine_class.jpg

Comments 0

No comments for this document

Attachments 2

[img]
WootEngine_class.jpg 1.1
PostedBy: Julien MAIRE on 21/02/2008 (1Mb )
[img]
WootEngineComponent.jpg 1.1
PostedBy: Julien MAIRE on 21/02/2008 (31kb )
Partenaires


Creator: Julien MAIRE on 20/02/2008 at 09:10
Copyright INRIA, ENST, EISTI, Mandriva, XPertNet
1.1-milestone-2.3619