Skip to content

Commit

Permalink
Merge pull request #10261 from indexity-io/3.1/lucene-ref-leak
Browse files Browse the repository at this point in the history
Fix IndexReader ref leak when Lucene index modified and read in transaction
  • Loading branch information
tglman authored Jun 26, 2024
2 parents 539c6f0 + d82624e commit d8baccb
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -209,10 +209,8 @@ public boolean hasNext() {
final boolean hasNext = index < (totalHits - deletedMatchCount);
if (!hasNext && !closed) {
final IndexSearcher searcher = queryContext.getSearcher();
if (searcher.getIndexReader().getRefCount() > 1) {
engine.release(searcher);
closed = true;
}
engine.release(searcher);
closed = true;
}
return hasNext;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import java.util.Map;
import java.util.Optional;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.MultiReader;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
Expand Down Expand Up @@ -104,9 +105,15 @@ public IndexSearcher getSearcher() {
}

private MultiReader multiReader(final OLuceneTxChanges luceneTxChanges) {
final IndexReader primaryReader = searcher.getIndexReader();
final IndexReader txReader = luceneTxChanges.searcher().getIndexReader();
try {
return new MultiReader(
searcher.getIndexReader(), luceneTxChanges.searcher().getIndexReader());
// Transfer ownership to the MultiReader so the index searcher can be releases transparently.
// Without this, the primary IndexReader will leak a refcount each time it is wrapped.
MultiReader multiReader = new MultiReader(new IndexReader[] {primaryReader, txReader}, false);
primaryReader.decRef();
txReader.decRef();
return multiReader;
} catch (final IOException e) {
throw OException.wrapException(
new OLuceneIndexException("unable to create reader on changes"), e);
Expand Down

0 comments on commit d8baccb

Please sign in to comment.