En surcouche à LUCENE, Silverpeas maintient un cache de lecteur d'index et un autre pour les écritures.
Même si les implémentations de LUCENE garantissent les concurrences d'accès entre les lectures et les écritures, les enchaînements des recherches et des mises à jour des contributions par les utilisateurs pouvaient mener à une situation instable, du fait de cette gestion de cache mise en place pour augmenter les performances.
Un premier travail a consisté à rendre plus robuste cette gestion de cache afin que la concurrence d'accès soit bien prise en compte dans toutes les situations.
Aussi, depuis la modification des indexes réalisée il y a quelques mois pour en réduire leur nombre (et en avoir un nombre fixe), la ré-indexation d'instance de composant ne permettait pas de supprimer les éventuels indexes concernant des contributions qui ne devraient plus être indexées (situations induites par d'autres anomalies). Ce point a été réglé.
Par ailleurs, il n'est plus nécessaire sur une ré-indexation totale de supprimer à la main le répertoire des indexes. Sur une telle ré-indexation, le répertoire des indexes est archivé via un simple renommage qui contient le moment auquel l'archivage a été effectué.
Par exemple index -> index_2018-06-08T153827.521
Libre ensuite aux administrateurs système de supprimer ou non le répertoire archivé.
Cette méthode d'archivage permet aussi de rétablir les indexes précédents si besoin.
Enfin, un nouveau paramètre a été mis en place dans le fichier de propriétés %SILVERPEAS_HOME/properties/org/silverpeas/index/search/searchEngineSettings.properties : index.reader.closeAfterLastSearch
qui permet d'indiquer au moteur de recherche, si sa valeur est true
, de fermer systématiquement les lecteurs d'indexes une fois que toutes les recherches sont terminées. Par défaut ce paramètre est à false
.
PRs: