From cc9306fbde23f1cfc8154e8568c4df1d4692ada4 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Sun, 5 Jun 2022 16:38:39 +0200 Subject: [PATCH] Check if accessible --- .../dbengine/lucene/searcher/CountMultiSearcher.java | 8 ++++++-- .../dbengine/lucene/searcher/PagedLocalSearcher.java | 12 ++++++++++-- .../lucene/searcher/ScoredPagedMultiSearcher.java | 12 ++++++++++-- .../searcher/SortedByScoreFullMultiSearcher.java | 4 +++- .../searcher/SortedScoredFullMultiSearcher.java | 4 +++- .../dbengine/lucene/searcher/StandardSearcher.java | 6 +++++- .../searcher/UnsortedStreamingMultiSearcher.java | 6 +++++- .../UnsortedUnscoredSimpleMultiSearcher.java | 8 ++++++-- 8 files changed, 48 insertions(+), 12 deletions(-) diff --git a/src/main/java/it/cavallium/dbengine/lucene/searcher/CountMultiSearcher.java b/src/main/java/it/cavallium/dbengine/lucene/searcher/CountMultiSearcher.java index 7e19aa7..19f89f7 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/searcher/CountMultiSearcher.java +++ b/src/main/java/it/cavallium/dbengine/lucene/searcher/CountMultiSearcher.java @@ -73,9 +73,13 @@ public class CountMultiSearcher implements MultiSearcher { return new LuceneSearchResult(totalHitsCount, mergedFluxes, () -> { for (LuceneSearchResult luceneSearchResult : resultsToDrop) { - luceneSearchResult.close(); + if (luceneSearchResult.isAccessible()) { + luceneSearchResult.close(); + } + } + if (indexSearchers.isAccessible()) { + indexSearchers.close(); } - indexSearchers.close(); }); }); }, false)); diff --git a/src/main/java/it/cavallium/dbengine/lucene/searcher/PagedLocalSearcher.java b/src/main/java/it/cavallium/dbengine/lucene/searcher/PagedLocalSearcher.java index 3c50415..0d54904 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/searcher/PagedLocalSearcher.java +++ b/src/main/java/it/cavallium/dbengine/lucene/searcher/PagedLocalSearcher.java @@ -54,8 +54,16 @@ public class PagedLocalSearcher implements LocalSearcher { .transform(firstPageTopDocsMono -> this.computeFirstPageResults(firstPageTopDocsMono, indexSearchers.shards(), keyFieldName, queryParams2)) // Compute other results - .transform(firstResult -> this.computeOtherResults(firstResult, indexSearchers.shards(), queryParams2, - keyFieldName, indexSearchers::close)) + .transform(firstResult -> this.computeOtherResults(firstResult, + indexSearchers.shards(), + queryParams2, + keyFieldName, + () -> { + if (indexSearchers.isAccessible()) { + indexSearchers.close(); + } + } + )) // Ensure that one LuceneSearchResult is always returned .single() ); diff --git a/src/main/java/it/cavallium/dbengine/lucene/searcher/ScoredPagedMultiSearcher.java b/src/main/java/it/cavallium/dbengine/lucene/searcher/ScoredPagedMultiSearcher.java index b2a794a..1688d55 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/searcher/ScoredPagedMultiSearcher.java +++ b/src/main/java/it/cavallium/dbengine/lucene/searcher/ScoredPagedMultiSearcher.java @@ -62,8 +62,16 @@ public class ScoredPagedMultiSearcher implements MultiSearcher { .transform(firstPageTopDocsMono -> this.computeFirstPageResults(firstPageTopDocsMono, indexSearchers, keyFieldName, queryParams2)) // Compute other results - .map(firstResult -> this.computeOtherResults(firstResult, indexSearchers.shards(), - queryParams2, keyFieldName, indexSearchers::close)) + .map(firstResult -> this.computeOtherResults(firstResult, + indexSearchers.shards(), + queryParams2, + keyFieldName, + () -> { + if (indexSearchers.isAccessible()) { + indexSearchers.close(); + } + } + )) // Ensure that one LuceneSearchResult is always returned .single(), false); diff --git a/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedByScoreFullMultiSearcher.java b/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedByScoreFullMultiSearcher.java index 62c9f16..a8e95ec 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedByScoreFullMultiSearcher.java +++ b/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedByScoreFullMultiSearcher.java @@ -127,7 +127,9 @@ public class SortedByScoreFullMultiSearcher implements MultiSearcher { .take(queryParams.limitLong(), true); return new LuceneSearchResult(totalHitsCount, hitsFlux, () -> { - indexSearchers.close(); + if (indexSearchers.isAccessible()) { + indexSearchers.close(); + } try { data.close(); } catch (Exception e) { diff --git a/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedScoredFullMultiSearcher.java b/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedScoredFullMultiSearcher.java index 7a28c6d..6cbc49d 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedScoredFullMultiSearcher.java +++ b/src/main/java/it/cavallium/dbengine/lucene/searcher/SortedScoredFullMultiSearcher.java @@ -121,7 +121,9 @@ public class SortedScoredFullMultiSearcher implements MultiSearcher { .take(queryParams.limitLong(), true); return new LuceneSearchResult(totalHitsCount, hitsFlux, () -> { - indexSearchers.close(); + if (indexSearchers.isAccessible()) { + indexSearchers.close(); + } data.close(); }); }); diff --git a/src/main/java/it/cavallium/dbengine/lucene/searcher/StandardSearcher.java b/src/main/java/it/cavallium/dbengine/lucene/searcher/StandardSearcher.java index 55fc9ce..9f8ab08 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/searcher/StandardSearcher.java +++ b/src/main/java/it/cavallium/dbengine/lucene/searcher/StandardSearcher.java @@ -143,7 +143,11 @@ public class StandardSearcher implements MultiSearcher { .skip(queryParams.offsetLong()) .take(queryParams.limitLong(), true); - return new LuceneSearchResult(totalHitsCount, hitsFlux, indexSearchers::close); + return new LuceneSearchResult(totalHitsCount, hitsFlux, () -> { + if (indexSearchers.isAccessible()) { + indexSearchers.close(); + } + }); }); } diff --git a/src/main/java/it/cavallium/dbengine/lucene/searcher/UnsortedStreamingMultiSearcher.java b/src/main/java/it/cavallium/dbengine/lucene/searcher/UnsortedStreamingMultiSearcher.java index ab32fb4..e54a86b 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/searcher/UnsortedStreamingMultiSearcher.java +++ b/src/main/java/it/cavallium/dbengine/lucene/searcher/UnsortedStreamingMultiSearcher.java @@ -53,7 +53,11 @@ public class UnsortedStreamingMultiSearcher implements MultiSearcher { .skip(queryParams2.offsetLong()) .take(queryParams2.limitLong(), true); - return new LuceneSearchResult(totalHitsCount, mergedFluxes, indexSearchers::close); + return new LuceneSearchResult(totalHitsCount, mergedFluxes, () -> { + if (indexSearchers.isAccessible()) { + indexSearchers.close(); + } + }); }); }, false); } diff --git a/src/test/java/it/cavallium/dbengine/UnsortedUnscoredSimpleMultiSearcher.java b/src/test/java/it/cavallium/dbengine/UnsortedUnscoredSimpleMultiSearcher.java index 3efa77c..9216628 100644 --- a/src/test/java/it/cavallium/dbengine/UnsortedUnscoredSimpleMultiSearcher.java +++ b/src/test/java/it/cavallium/dbengine/UnsortedUnscoredSimpleMultiSearcher.java @@ -74,9 +74,13 @@ public class UnsortedUnscoredSimpleMultiSearcher implements MultiSearcher { return new LuceneSearchResult(totalHitsCount, mergedFluxes, () -> { for (LuceneSearchResult luceneSearchResult : resultsToDrop) { - luceneSearchResult.close(); + if (luceneSearchResult.isAccessible()) { + luceneSearchResult.close(); + } + } + if (indexSearchers.isAccessible()) { + indexSearchers.close(); } - indexSearchers.close(); }); }) .doFirst(() -> {