Search in sources :

Example 21 with CheckedFunction

use of org.opensearch.common.CheckedFunction in project OpenSearch by opensearch-project.

the class IndexReaderWrapperTests method testReaderCloseListenerIsCalled.

public void testReaderCloseListenerIsCalled() throws IOException {
    Directory dir = newDirectory();
    IndexWriterConfig iwc = newIndexWriterConfig();
    IndexWriter writer = new IndexWriter(dir, iwc);
    Document doc = new Document();
    doc.add(new StringField("id", "1", random().nextBoolean() ? Field.Store.YES : Field.Store.NO));
    doc.add(new TextField("field", "doc", random().nextBoolean() ? Field.Store.YES : Field.Store.NO));
    writer.addDocument(doc);
    DirectoryReader open = OpenSearchDirectoryReader.wrap(DirectoryReader.open(writer), new ShardId("foo", "_na_", 1));
    IndexSearcher searcher = new IndexSearcher(open);
    assertEquals(1, searcher.search(new TermQuery(new Term("field", "doc")), 1).totalHits.value);
    final AtomicInteger closeCalls = new AtomicInteger(0);
    CheckedFunction<DirectoryReader, DirectoryReader, IOException> wrapper = reader -> new FieldMaskingReader("field", reader, closeCalls);
    final int sourceRefCount = open.getRefCount();
    final AtomicInteger count = new AtomicInteger();
    final AtomicInteger outerCount = new AtomicInteger();
    final AtomicBoolean closeCalled = new AtomicBoolean(false);
    final Engine.Searcher wrap = IndexShard.wrapSearcher(new Engine.Searcher("foo", open, IndexSearcher.getDefaultSimilarity(), IndexSearcher.getDefaultQueryCache(), IndexSearcher.getDefaultQueryCachingPolicy(), () -> closeCalled.set(true)), wrapper);
    assertEquals(1, wrap.getIndexReader().getRefCount());
    OpenSearchDirectoryReader.addReaderCloseListener(wrap.getDirectoryReader(), key -> {
        if (key == open.getReaderCacheHelper().getKey()) {
            count.incrementAndGet();
        }
        outerCount.incrementAndGet();
    });
    assertEquals(0, wrap.search(new TermQuery(new Term("field", "doc")), 1).totalHits.value);
    wrap.close();
    assertFalse("wrapped reader is closed", wrap.getIndexReader().tryIncRef());
    assertEquals(sourceRefCount, open.getRefCount());
    assertTrue(closeCalled.get());
    assertEquals(1, closeCalls.get());
    IOUtils.close(open, writer, dir);
    assertEquals(1, outerCount.get());
    assertEquals(1, count.get());
    assertEquals(0, open.getRefCount());
    assertEquals(1, closeCalls.get());
}
Also used : IndexSearcher(org.apache.lucene.search.IndexSearcher) CheckedFunction(org.opensearch.common.CheckedFunction) StringField(org.apache.lucene.document.StringField) Term(org.apache.lucene.index.Term) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Document(org.apache.lucene.document.Document) FilterDirectoryReader(org.apache.lucene.index.FilterDirectoryReader) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Directory(org.apache.lucene.store.Directory) TopDocs(org.apache.lucene.search.TopDocs) OpenSearchDirectoryReader(org.opensearch.common.lucene.index.OpenSearchDirectoryReader) DirectoryReader(org.apache.lucene.index.DirectoryReader) OpenSearchTestCase(org.opensearch.test.OpenSearchTestCase) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) FieldFilterLeafReader(org.apache.lucene.index.FieldFilterLeafReader) IOException(java.io.IOException) IOUtils(org.opensearch.core.internal.io.IOUtils) Engine(org.opensearch.index.engine.Engine) IndexWriter(org.apache.lucene.index.IndexWriter) TermQuery(org.apache.lucene.search.TermQuery) Field(org.apache.lucene.document.Field) LeafReader(org.apache.lucene.index.LeafReader) TextField(org.apache.lucene.document.TextField) IndexWriterConfig(org.apache.lucene.index.IndexWriterConfig) Collections(java.util.Collections) IndexSearcher(org.apache.lucene.search.IndexSearcher) TermQuery(org.apache.lucene.search.TermQuery) FilterDirectoryReader(org.apache.lucene.index.FilterDirectoryReader) OpenSearchDirectoryReader(org.opensearch.common.lucene.index.OpenSearchDirectoryReader) DirectoryReader(org.apache.lucene.index.DirectoryReader) Term(org.apache.lucene.index.Term) IOException(java.io.IOException) Document(org.apache.lucene.document.Document) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) IndexWriter(org.apache.lucene.index.IndexWriter) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) StringField(org.apache.lucene.document.StringField) TextField(org.apache.lucene.document.TextField) Engine(org.opensearch.index.engine.Engine) Directory(org.apache.lucene.store.Directory) IndexWriterConfig(org.apache.lucene.index.IndexWriterConfig)

Example 22 with CheckedFunction

use of org.opensearch.common.CheckedFunction in project OpenSearch by opensearch-project.

the class IndexReaderWrapperTests method testIsCacheable.

public void testIsCacheable() throws IOException {
    Directory dir = newDirectory();
    IndexWriterConfig iwc = newIndexWriterConfig();
    IndexWriter writer = new IndexWriter(dir, iwc);
    Document doc = new Document();
    doc.add(new StringField("id", "1", random().nextBoolean() ? Field.Store.YES : Field.Store.NO));
    doc.add(new TextField("field", "doc", random().nextBoolean() ? Field.Store.YES : Field.Store.NO));
    writer.addDocument(doc);
    DirectoryReader open = OpenSearchDirectoryReader.wrap(DirectoryReader.open(writer), new ShardId("foo", "_na_", 1));
    IndexSearcher searcher = new IndexSearcher(open);
    assertEquals(1, searcher.search(new TermQuery(new Term("field", "doc")), 1).totalHits.value);
    searcher.setSimilarity(iwc.getSimilarity());
    final AtomicInteger closeCalls = new AtomicInteger(0);
    CheckedFunction<DirectoryReader, DirectoryReader, IOException> wrapper = reader -> new FieldMaskingReader("field", reader, closeCalls);
    final ConcurrentHashMap<Object, TopDocs> cache = new ConcurrentHashMap<>();
    AtomicBoolean closeCalled = new AtomicBoolean(false);
    try (Engine.Searcher wrap = IndexShard.wrapSearcher(new Engine.Searcher("foo", open, IndexSearcher.getDefaultSimilarity(), IndexSearcher.getDefaultQueryCache(), IndexSearcher.getDefaultQueryCachingPolicy(), () -> closeCalled.set(true)), wrapper)) {
        OpenSearchDirectoryReader.addReaderCloseListener(wrap.getDirectoryReader(), key -> {
            cache.remove(key);
        });
        TopDocs search = wrap.search(new TermQuery(new Term("field", "doc")), 1);
        cache.put(wrap.getIndexReader().getReaderCacheHelper().getKey(), search);
    }
    assertTrue(closeCalled.get());
    assertEquals(1, closeCalls.get());
    assertEquals(1, cache.size());
    IOUtils.close(open, writer, dir);
    assertEquals(0, cache.size());
    assertEquals(1, closeCalls.get());
}
Also used : IndexSearcher(org.apache.lucene.search.IndexSearcher) CheckedFunction(org.opensearch.common.CheckedFunction) StringField(org.apache.lucene.document.StringField) Term(org.apache.lucene.index.Term) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Document(org.apache.lucene.document.Document) FilterDirectoryReader(org.apache.lucene.index.FilterDirectoryReader) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Directory(org.apache.lucene.store.Directory) TopDocs(org.apache.lucene.search.TopDocs) OpenSearchDirectoryReader(org.opensearch.common.lucene.index.OpenSearchDirectoryReader) DirectoryReader(org.apache.lucene.index.DirectoryReader) OpenSearchTestCase(org.opensearch.test.OpenSearchTestCase) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) FieldFilterLeafReader(org.apache.lucene.index.FieldFilterLeafReader) IOException(java.io.IOException) IOUtils(org.opensearch.core.internal.io.IOUtils) Engine(org.opensearch.index.engine.Engine) IndexWriter(org.apache.lucene.index.IndexWriter) TermQuery(org.apache.lucene.search.TermQuery) Field(org.apache.lucene.document.Field) LeafReader(org.apache.lucene.index.LeafReader) TextField(org.apache.lucene.document.TextField) IndexWriterConfig(org.apache.lucene.index.IndexWriterConfig) Collections(java.util.Collections) IndexSearcher(org.apache.lucene.search.IndexSearcher) TermQuery(org.apache.lucene.search.TermQuery) FilterDirectoryReader(org.apache.lucene.index.FilterDirectoryReader) OpenSearchDirectoryReader(org.opensearch.common.lucene.index.OpenSearchDirectoryReader) DirectoryReader(org.apache.lucene.index.DirectoryReader) Term(org.apache.lucene.index.Term) IOException(java.io.IOException) Document(org.apache.lucene.document.Document) TopDocs(org.apache.lucene.search.TopDocs) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) IndexWriter(org.apache.lucene.index.IndexWriter) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) StringField(org.apache.lucene.document.StringField) TextField(org.apache.lucene.document.TextField) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Engine(org.opensearch.index.engine.Engine) Directory(org.apache.lucene.store.Directory) IndexWriterConfig(org.apache.lucene.index.IndexWriterConfig)

Aggregations

CheckedFunction (org.opensearch.common.CheckedFunction)22 IOException (java.io.IOException)19 Collections (java.util.Collections)17 Arrays (java.util.Arrays)15 List (java.util.List)15 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)15 ArrayList (java.util.ArrayList)14 Map (java.util.Map)14 AtomicReference (java.util.concurrent.atomic.AtomicReference)13 OpenSearchTestCase (org.opensearch.test.OpenSearchTestCase)13 Set (java.util.Set)12 Collectors (java.util.stream.Collectors)12 Stream (java.util.stream.Stream)12 OpenSearchException (org.opensearch.OpenSearchException)12 ActionListener (org.opensearch.action.ActionListener)12 NamedXContentRegistry (org.opensearch.common.xcontent.NamedXContentRegistry)12 HashSet (java.util.HashSet)11 Tuple (org.opensearch.common.collect.Tuple)11 XContentBuilder (org.opensearch.common.xcontent.XContentBuilder)11 HashMap (java.util.HashMap)10