-
Bug
-
Résolution: Ne sera pas résolu
-
Majeur
-
6.02.22, 6.04.14
-
Aucune
-
Aucune
Pour corriger le CORE-1599, on a intégré des fermetures d'index sur lucene. Sauf que dans certains cas, si deux threads interviennent en même temps sur une recherche, l'un des deux peut se retrouver avec un IndexReader fermé par l'autre thread.
En front-office :
org.apache.lucene.store.AlreadyClosedException: this IndexReader is closed at org.apache.lucene.index.IndexReader.ensureOpen(IndexReader.java:245) ~[lucene-core-3.6.2.jar:3.6.2 1423725 - rmuir - 2012-12-18 19:45:40] at org.apache.lucene.index.SegmentReader.norms(SegmentReader.java:569) ~[lucene-core-3.6.2.jar:3.6.2 1423725 - rmuir - 2012-12-18 19:45:40] at org.apache.lucene.search.TermQuery$TermWeight.scorer(TermQuery.java:107) ~[lucene-core-3.6.2.jar:3.6.2 1423725 - rmuir - 2012-12-18 19:45:40] at org.apache.lucene.search.BooleanQuery$BooleanWeight.scorer(BooleanQuery.java:305) ~[lucene-core-3.6.2.jar:3.6.2 1423725 - rmuir - 2012-12-18 19:45:40] at org.apache.lucene.search.BooleanQuery$BooleanWeight.scorer(BooleanQuery.java:305) ~[lucene-core-3.6.2.jar:3.6.2 1423725 - rmuir - 2012-12-18 19:45:40] at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:577) ~[lucene-core-3.6.2.jar:3.6.2 1423725 - rmuir - 2012-12-18 19:45:40] at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:383) ~[lucene-core-3.6.2.jar:3.6.2 1423725 - rmuir - 2012-12-18 19:45:40] at com.univ.utils.RechercheUtil.search(RechercheUtil.java:184) ~[RechercheUtil.class:na]
En back-office :
2016-03-09 09:05:00.181 [MultiFicheAutoCompletion.java:55] [ERROR] Impossible d'executer la recherche org.apache.lucene.store.AlreadyClosedException: this IndexReader is closed at org.apache.lucene.index.IndexReader.ensureOpen(IndexReader.java:245) ~[lucene-core-3.6.2.jar:3.6.2 1423725 - rmuir - 2012-12-18 19:45:40] at org.apache.lucene.index.IndexReader.document(IndexReader.java:1134) ~[lucene-core-3.6.2.jar:3.6.2 1423725 - rmuir - 2012-12-18 19:45:40] at org.apache.lucene.search.IndexSearcher.doc(IndexSearcher.java:258) ~[lucene-core-3.6.2.jar:3.6.2 1423725 - rmuir - 2012-12-18 19:45:40] at com.jsbsoft.jtf.textsearch.util.RechercheUtilBO.searchAll(RechercheUtilBO.java:108) ~[RechercheUtilBO.class:na]
A priori, je dirai que cela provient de la méthode forceInit() de Searcher qui n'est pas synchronisée. Elle est appelée dans testReader() (qui vérifie que l'index est bien ouvert avant de lancer une recherche), mais si les deux threads y rentrent ensemble, l'un peut fermer le reader juste après qu'il ait été ouvert par le premier.
A voir si ce n'est pas testReader() qui doit être passée en synchronized