Example #1
0
 private AcquirableResource<ReaderSearcherHolder> buildNrtResource(IndexWriter indexWriter)
     throws IOException {
   IndexReader indexReader = indexWriter.getReader();
   IndexSearcher indexSearcher = new IndexSearcher(indexReader);
   indexSearcher.setSimilarity(similarityService.defaultSearchSimilarity());
   return newAcquirableResource(new ReaderSearcherHolder(indexSearcher));
 }
Example #2
0
 @Override
 public void refresh(Refresh refresh) throws EngineException {
   // we obtain a read lock here, since we don't want a flush to happen while we are refreshing
   // since it flushes the index as well (though, in terms of concurrency, we are allowed to do it)
   rwl.readLock().lock();
   if (indexWriter == null) {
     throw new EngineClosedException(shardId);
   }
   try {
     // this engine always acts as if waitForOperations=true
     if (refreshMutex.compareAndSet(false, true)) {
       IndexWriter currentWriter = indexWriter;
       if (currentWriter == null) {
         throw new EngineClosedException(shardId);
       }
       try {
         if (dirty) {
           dirty = false;
           AcquirableResource<ReaderSearcherHolder> current = nrtResource;
           IndexReader newReader = current.resource().reader().reopen(true);
           if (newReader != current.resource().reader()) {
             IndexSearcher indexSearcher = new IndexSearcher(newReader);
             indexSearcher.setSimilarity(similarityService.defaultSearchSimilarity());
             nrtResource = newAcquirableResource(new ReaderSearcherHolder(indexSearcher));
             current.markForClose();
           }
         }
       } catch (AlreadyClosedException e) {
         // an index writer got replaced on us, ignore
       } catch (Exception e) {
         if (indexWriter == null) {
           throw new EngineClosedException(shardId);
         } else if (currentWriter != indexWriter) {
           // an index writer got replaced on us, ignore
         } else {
           throw new RefreshFailedEngineException(shardId, e);
         }
       } finally {
         refreshMutex.set(false);
       }
     }
   } finally {
     rwl.readLock().unlock();
   }
 }