Du côté de XWiki
Le prototype XWoot requiert certaines modifications pour être totalement fonctionnel dans un cadre normal d'utilisation. Trois points doivent être étudiés particulièrement :- la mise à jour des pages par l'opération SetPage de l'interface SWizzle,
- la synchronisation de l'ensemble des pages,
- les métadonnées non traitées
La mise à jour des pages par l'opération SetPage de l'interface SWizzle
Actuellement, le traitement d'une page nécessite trois copies :- une copie dans XWiki (la vue)
- deux copies dans XWoot :
- une dans WootEngine (le modèle),
- et une copie du dernier état de la vue récupéré par XWoot
- XWiki : serveur XWiki
- XWoot : le module XWoot associé à XWiki
- p : nom de la page à mettre à jour
Page p1=XWoot.getPageInModele(p)
Page p2=XWoot.getLastVuePage(p)
MD5 m1=XWoot.md5(p2)
Page p3=XWiki.getPage(p)
MD5 m2=XWoot.md5(p3)
SI (m1==m2)XWiki.setPage(p,p1)SINON
XWoot.setLastVuePage(p,p1)
XWoot.updateModele(p,p3)FINSI
XWoot.setLastVuePage(p,p3)
XWoot.synchronize(p)
Cette solution qui repose sur l'utilisation d'un MD5 (Message-Digest algorithm 5) pose un certain nombre de problèmes :
- il est nécessaire de sauvegarder une copie de chaque page, et ce, en plus de la copie des données présente dans le modèle de WootEngine utilisé par XWoot. Cette copie représente le dernier état de la page provenant du serveur XWiki pris en compte par le module XWoot.
- il existe un intervalle de temps non nul durant lequel une mise à jour effectuée sur le serveur XWiki est écrasée par le setPage.
- Créer un système d'abonnement permettant à un module se connectant à XWiki de s'abonner pour être notifié à chaque modification sur le serveur XWiki (Listener). A chaque notification, XWoot pourra alors mettre à jour son modèle.
- Créer une méthode permettant de demander si une page n'a pas été modifiée depuis la dernière demande. Il n'y aurait alors plus besoin du MD5. Par contre, pour réduire au maximum la zone critique entre la demande et la mise à jour, le setPage au niveau de XWiki devra aussi vérifier juste avant de mettre à jour.
- Le minimum serait de fournir le MD5 à XWiki lors de la mise à jour d'une page ; c'est XWiki qui se chargera alors de vérifier que la mise à jour se fait à partir de la dernière version de la page. Cela permettra de maintenir une zone critique pour l'instant non respectée (pour l'instant rien ne garanti qu'une modification n'a pas été faite durant l'intervalle de temps séparant la vérification du MD5 par XWoot et l'envoi de la mise à jour).
La synchronisation
Pour les mêmes raisons que précédemment, lors de chaque synchronisation entre XWoot et XWiki, XWoot doit vérifier l'intégralité des pages de XWiki. Ce qui signifie qu'il doit faire un getPage pour toutes les pages stockées sur le serveur et vérifier pour chacune d'elles si elle sont différentes de la version du modèle. Ce travail est fastidieux et rend impossible le fonctionnement du prototype ; la solution actuelle étant de choisir les pages que l'on veut vérifier (i.e. un petit sous-ensemble), à travers une interface d'administration. Cette solution rend malheureusement caduc l'algorithme Woot et peut faire diverger le système (les liens vers les pages non synchronisées peuvent conduire l'utilisateur à les créer car elles n'existent pas localement). Plusieurs pistes pour résoudre ce problème :- permettre l'accès à un journal des identifiants des pages ayant subi des modifications. Ce journal pourrait alors être vérifié par le module XWoot à chaque synchronisation. Le journal fournira par exemple un identifiant unique par entrée qui permettra à XWoot de récupérer les nouvelles entrées facilement.
- créer un système d'abonnement permettant à un module se connectant à XWiki de s'abonner pour être notifié à chaque modification sur le serveur XWiki (Listener). Plus besoin de synchronisation en tant que tel puisque le module XWoot recevra les modifications en temps réel.
Les méta-données manquantes
Dans l'état actuel du prototype, les seules méta-données répliquées sont les commentaires et le champ "Parent". Il est nécessaire de pouvoir accéder et mettre à jour l'ensemble de toutes les méta-données (objets, classes ,...), sinon les synchronisations risquent d'être inutilisables. On peut imaginer que le test final serait d'installer un XWiki sans le set de page par défaut, un XWiki avec, et de synchroniser le deuxième avec le premier ; pour l'instant le résultat est inutilisable (les pages d'administration, de configuration, les templates ....).Du côté de XWoot
Afin de pouvoir piloter XWoot depuis XWiki, il serait intéressant de fournir l'interface suivante : / Lancer une synchronisation entre les données XWiki et le modèle XWoot /void synchronize() / Récupérer la liste des voisins /
Collection getNeighbors() / Configurer l'URL d'accès à l'interface XMLRPC du XWiki voulu /
void setXWikiURL(URI url) / Récupérer l'URL d'accès à l'interface XMLRPC du XWiki voulu /
URI getXWikiURL() / Configurer l'URL du module XWoot servant de point d'entrée dans le réseau P2P /
void setP2PEntryPoint(URI url) / Récupérer l'URL du module XWoot servant de point d'entrée dans le réseau P2P /
URI getP2PEntryPoint() / Effectuer un échange d'état avec un voisin /
void doStateTransfert(Neighbor with) / Effectuer une anti entropie avec un voisin /
void doAntiEntropy(Neighbor with) / Configurer le login du compte utilisateur permettant d'accéder aux données du XWiki /
void setXWikiUserLogin(String user) / Configurer le mot de passe du compte utilisateur permettant d'accéder aux données du XWiki /
void setXWikiUserPassword(Password passwd) / connecter le module au XWiki /
void connect() / déconnecter le module au XWiki /
void disconnect()
Version 1.30 last modified by Julien MAIRE on 18/04/2008 at 11:25
Document data
Attachments:
No attachments for this document

Comments: 0