cancel
Showing results for 
Search instead for 
Did you mean: 

Webscript : Déplacement d'un document et index

asmund
Champ in-the-making
Champ in-the-making
Bonjour à tous

Je suis confronté depuis pas mal de temps, à un problème technique lié au déplacement de document dans un webscript.
Aléatoirement, la fonction move(scriptnode destination), marque bien le document comme déplacé dans la base de données, mais ne l'est pas dans l'index.
Pour forcer la bonne indexation du document, je suis obligé d'ouvrir le document dans l'interface d'admin d'Alfresco, puis de le sauvegarder.

J'ai eu beau chercher (forumn, code source, buglist) et je ne trouve pas. Pas d'erreurs dans les logs de l'application et je confirme, le problème apparaît aléatoirement (une fois ou deux par semaine). J'ai constaté cette désynchronisation entre la base et l'index, en effectuant conjointement des requetes lucenes, et MySQL. Les emplacements n'étaient pas les mêmes.

Pour info, nous avons précisément 368280 documents, dont seules les méta-données sont indexées (le contenu du fichier n'est pas inclut dans l'index).
Il y a environ 20 utilisateurs connectés simultanéement, et chaque utilisateur passe par une interface graphique en .Net, qui pilote Alfresco via des Webscripts.

La version d'Alfresco utilisée est la 3.4, et l'index est basé sur Lucene. Le moteur de base de données est MySQL.

Le serveur qui héberge physiquement Alfresco possède les caractéristiques suivantes :
- Windows 2008 Server fonctionnant sur une machine virtuelle HyperV2, mais le problème était le même sur VMWare.
- Base de données MySQL
- Le disque dur stockant l'index, la base et les binaires n'est pas virtuel. L'accès au disque est local.
- 16Go de RAM

Les ressources systèmes ne sont pas saturées, et le serveur Alfresco répond bien.

Voici le bout de code incriminé

var noeuds = search.luceneSearch("PATH:\"" + args.path + "\"");
if(noeuds.length != 0) {
   var chemin = noeuds[0];
   var document = search.findNode('workspace://SpacesStore/' + args.uuid);
   if(document != null) {
      document.move(chemin);
      model.statut="ok";
      model.message="document deplace";

   } else {
      model.statut="error";
      model.message="document inconnu : " + args.uuid
   }
} else {
   model.statut="error";
   model.message="chemin inconnu : " + args.path
}

Pour tester, j'ai ajouté un document.save(), juste après le document.move(…), histoire de forcer l'enregistrement, mais cela ne donne rien.

Si quelqu'un avait une piste…
En vous remerciant à l'avance
5 REPLIES 5

rguinot
Confirmed Champ
Confirmed Champ
version d'alfresco ? erreurs dans les logs ? qu'avez vous tenté pour diagnostiquer ? utilisez vous lucene ou le serveur d'indexation basé sur solr ? comment est accédé le disque sur lequel les indexes lucene sont stockés (protocole de type file comme NFS ou CIFS , ou bien en mode bloc physiquement local ou bien fiber ) ?

Laissez savoir.

asmund
Champ in-the-making
Champ in-the-making
version d'alfresco ? erreurs dans les logs ? qu'avez vous tenté pour diagnostiquer ? utilisez vous lucene ou le serveur d'indexation basé sur solr ? comment est accédé le disque sur lequel les indexes lucene sont stockés (protocole de type file comme NFS ou CIFS , ou bien en mode bloc physiquement local ou bien fiber ) ?

Laissez savoir.

Effectivement, j'avais oublié la version d'Alfresco, qui est la 3.4. J'ai édité mon précédent message, pour y ajouter des précisions concernant l'accès physique au disque dur, et le moteur d'indexation basé sur Lucène.

rguinot
Confirmed Champ
Confirmed Champ
Que se passe-t-il si dans votre script vous modifiez également une propriété du noeud en question ?

asmund
Champ in-the-making
Champ in-the-making
Que se passe-t-il si dans votre script vous modifiez également une propriété du noeud en question ?

Dans ce script, je n'ai jamais essayé. Ce script ne fait que de déplacer un document.
Par compte, avant d'appeler ce script, un autre script est lancé. Celui-ci modifie les propriétés du document et l'enregistre. Ces propriétés sont bien associées au document et apparaissent bien dans l'index.

C'est uniquement lorsque le document est déplacé, que son emplacement n'est pas toujours mis à jour dans l'index. Ce phénomène 'est aléatoire. Pour 1000 documents traités dans la journée, seulement 1 ou deux sont impactés.

Mais je vais suivre votre conseil, et modifier une propriété "bidon" (genre une date), juste après le déplacement du document. Cela forcera peut être l'index à se remettre à jour avec le bon emplacement.

Je ferais un retour si j'ai du neuf. Merci en tous les cas pour l'idée.

rguinot
Confirmed Champ
Confirmed Champ
dans le cadre de ce test, veillez à bien appeler document.save() après la modif de métadonnée.