Ensure LuceneChangesSnapshot close once
This commit is contained in:
parent
b1f5d361b3
commit
08c2f551c0
|
@ -34,6 +34,7 @@ import org.apache.lucene.search.TopDocs;
|
||||||
import org.apache.lucene.util.ArrayUtil;
|
import org.apache.lucene.util.ArrayUtil;
|
||||||
import org.elasticsearch.common.bytes.BytesReference;
|
import org.elasticsearch.common.bytes.BytesReference;
|
||||||
import org.elasticsearch.common.lucene.Lucene;
|
import org.elasticsearch.common.lucene.Lucene;
|
||||||
|
import org.elasticsearch.core.internal.io.IOUtils;
|
||||||
import org.elasticsearch.index.VersionType;
|
import org.elasticsearch.index.VersionType;
|
||||||
import org.elasticsearch.index.fieldvisitor.FieldsVisitor;
|
import org.elasticsearch.index.fieldvisitor.FieldsVisitor;
|
||||||
import org.elasticsearch.index.mapper.IdFieldMapper;
|
import org.elasticsearch.index.mapper.IdFieldMapper;
|
||||||
|
@ -49,6 +50,7 @@ import java.io.IOException;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link Translog.Snapshot} from changes in a Lucene index
|
* A {@link Translog.Snapshot} from changes in a Lucene index
|
||||||
|
@ -88,6 +90,12 @@ final class LuceneChangesSnapshot implements Translog.Snapshot {
|
||||||
if (searchBatchSize < 0) {
|
if (searchBatchSize < 0) {
|
||||||
throw new IllegalArgumentException("Search_batch_size must not be negative [" + searchBatchSize + "]");
|
throw new IllegalArgumentException("Search_batch_size must not be negative [" + searchBatchSize + "]");
|
||||||
}
|
}
|
||||||
|
final AtomicBoolean closed = new AtomicBoolean();
|
||||||
|
this.onClose = () -> {
|
||||||
|
if (closed.compareAndSet(false, true)) {
|
||||||
|
IOUtils.close(engineSearcher);
|
||||||
|
}
|
||||||
|
};
|
||||||
this.mapperService = mapperService;
|
this.mapperService = mapperService;
|
||||||
this.searchBatchSize = searchBatchSize;
|
this.searchBatchSize = searchBatchSize;
|
||||||
this.fromSeqNo = fromSeqNo;
|
this.fromSeqNo = fromSeqNo;
|
||||||
|
@ -98,10 +106,8 @@ final class LuceneChangesSnapshot implements Translog.Snapshot {
|
||||||
this.indexSearcher.setQueryCache(null);
|
this.indexSearcher.setQueryCache(null);
|
||||||
this.parallelArray = new ParallelArray(searchBatchSize);
|
this.parallelArray = new ParallelArray(searchBatchSize);
|
||||||
final TopDocs topDocs = searchOperations(null);
|
final TopDocs topDocs = searchOperations(null);
|
||||||
|
|
||||||
this.totalHits = Math.toIntExact(topDocs.totalHits);
|
this.totalHits = Math.toIntExact(topDocs.totalHits);
|
||||||
this.scoreDocs = topDocs.scoreDocs;
|
this.scoreDocs = topDocs.scoreDocs;
|
||||||
this.onClose = engineSearcher;
|
|
||||||
fillParallelArray(scoreDocs, parallelArray);
|
fillParallelArray(scoreDocs, parallelArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue