Symptômes
La barre de recherche ne propose pas l'option pour rechercher dans tous les dossiers
C'est notamment le cas si vous avez effectué une migration des mails au niveau du système de fichier.
Cela signifie que l'index de recherche d'Elasticsearch n'existe pas, vous pouvez exécuter la tâche ConsolidateMailSpoolIndexJob
pour créer l'index et indexer l'ensemble des mails du serveur.
Il manque des résultats dans la recherche
En cas de problèmes temporaires avec le service d'indexation il est possible que certains messages envoyés et reçus pendant cette période n'aient pas été indexés, dans ce cas il suffit d’exécuter la tâche ConsolidateMailSpoolIndexJob
qui va calculer la différence entre les messages au niveau IMAP et dans l'index puis indexer uniquement les messages manquants.
Une erreur s'affiche lors d'une recherche
Cela peut provenir d'une incohérence entre la liste des dossiers au niveau IMAP et dans la base de données, l'action de maintenance "check&repair" accessible depuis l'onglet Maintenance de la fiche utilisateur permet de reconstruire cette liste, une ré-indexation de la boite de messagerie doit ensuite corriger le problème.
Si ce n'est pas le cas, les logs /var/log/bm-webmail.errors peuvent indiquer l'origine du problème.
Une erreur s'affiche lors de l'accès à un message trouvé par une recherche
Il s'agit probablement d'un défaut d'indexation lorsque qu'un message a été déplacé, l'action de maintenance "Consolider la boite mail" accessible depuis l'onglet Maintenance de la fiche utilisateur permet de mettre à jour l'index de recherche.
Problème/Confirmation
Si vous constatez un dysfonctionnement de la recherche dans BlueMind vous pouvez en déterminer la cause avec la commande :
curl -XGET --silent 'http://localhost:9200/_cluster/health'
Cette commande permet d'afficher l'état du cluster ElasticSearch, si le statut est 'green' tout va bien, s'il est 'red' cela signifie qu'il y a un problème au niveau d'Elasticsearch. Cette information remonte également dans la console de monitoring.
Résolution
Plusieurs conditions peuvent empêcher le fonctionnement d'ElasticSearch :
une corruption des index : principalement à cause d'un manque d'espace disque, il faut au minimum 10% d'espace disque libre. Si le disque contenant les données d'ES (/var/spool/bm-elasticsearch) a manqué d'espace il est possible que les index de recherche soient corrompus. Dans les logs ES, cela se traduit par une erreur lors du démarrage du service :
[2017-01-26 20:06:54,764][WARN ][cluster.action.shard] [Bill Foster] [mailspool][0] received shard failed for [mailspool][0], node[PcC6eICxRAajmWioK1mhDA], [P], s[INITIALIZING], indexUUID [IEJHQkOnTtOcdY0bMMIFRA], reason [master [Bill Foster][PcC6eICxRAajmWioK1mhDA][bluemind.exa.net.uk][inet[/82.219.13.101:9300]] marked shard as initializing, but shard is marked as failed, resend shard failure] [2016-01-26 20:06:55,828][WARN ][indices.cluster] [Bill Foster] [mailspool][0] failed to start shard org.elasticsearch.index.gateway.IndexShardGatewayRecoveryException: [mailspool][0] failed to recover shard at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:287) at org.elasticsearch.index.gateway.IndexShardGatewayService$1.run(IndexShardGatewayService.java:132) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)
Il faut alors supprimer l'index :
cd /var/spool/bm-elasticsearch/data/bluemind-c68b34ff-ccf4-49f8-9456-e8db902e8f66/nodes/0/indices/ service bm-elasticsearch stop rm -fr mailspool/ service bm-elasticsearch start
Puis lancer une nouvelle indexation depuis la gestion des tâches planifiées > lancer la tâche
ConsolidateMailSpoolIndexJob
Attention cependant, l'indexation des mails est une opération consommatrice en IO et il est préférable de lancer cette tâche en soirée ou en week-end. Vous pouvez également lancer la réindexation par lot en utilisant bm-cli.
une corruption du
translog
: cela peut se produire en cas de crash du serveur ou de manque de mémoire. Dans ce cas l'index général n'est pas corrompu et seule l'indexation des derniers documents non encore écrits sur le disque sera perdue.
Dans les logs ES, cela se traduit par cette erreur lors du démarrage du service :[2017-09-04 19:24:38,340][WARN ][indices.cluster ] [Hebe] [mailspool][1] failed to start shard org.elasticsearch.index.gateway.IndexShardGatewayRecoveryException: [mailspool][1] failed to recover shard at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:287) at org.elasticsearch.index.gateway.IndexShardGatewayService$1.run(IndexShardGatewayService.java:132) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: org.elasticsearch.index.translog.TranslogCorruptedException: translog corruption while reading from stream at org.elasticsearch.index.translog.ChecksummedTranslogStream.read(ChecksummedTranslogStream.java:70) at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:257) ... 4 more
Pour supprimer les translog corrompu :
service bm-elasticsearch stop rm -rf /var/spool/bm-elasticsearch/data/bluemind-5da5da65-b2e8-4b1e-afb2-f26792f66ac4/nodes/0/indices/mailspool/*/translog service bm-elasticsearch start
L’exécution de la tâche
ConsolidateMailSpoolIndexJob
va ré-indexer les mails manquants