@Override public void onChangeSetApplied(boolean someFailureHappened, boolean streaming) { synchronized ( lock ) { openWriterUsers--; if ( openWriterUsers == 0 ) { if ( someFailureHappened ) { indexWriterHolder.forceLockRelease(); } else { if ( ! streaming || lastExitCloses ) { lastExitCloses = false; indexWriterHolder.closeIndexWriter(); } } } else { if ( ! someFailureHappened && ! streaming ) { indexWriterHolder.commitIndexWriter(); } } } }
@Override public IndexWriter getIndexWriter() { return indexWriterHolder.getIndexWriter(); }
@Override public void onChangeSetApplied(boolean someFailureHappened, boolean streaming) { if ( someFailureHappened ) { indexWriterHolder.forceLockRelease(); } else { if ( !streaming ) { indexWriterHolder.commitIndexWriter(); } } }
@Override public void onFlush() { synchronized (lock) { if ( openWriterUsers == 0 ) { indexWriterHolder.closeIndexWriter(); } else { lastExitCloses = true; indexWriterHolder.commitIndexWriter(); } } }
/** * @see #commitIndexWriter(ErrorContextBuilder) */ public void commitIndexWriter() { commitIndexWriter( null ); }
/** * Closes a previously opened IndexWriter. */ public void closeIndexWriter() { final IndexWriter toClose = writer.getAndSet( null ); if ( toClose != null ) { try { toClose.close(); log.trace( "IndexWriter closed" ); } catch (IOException ioe) { forceLockRelease(); handleIOException( ioe, null ); } } }
if ( indexWriter == null ) { try { indexWriter = createNewIndexWriter(); log.trace( "IndexWriter opened" ); writer.set( indexWriter ); indexWriter = null; writer.set( null ); handleIOException( ioe, errorContextBuilder );
@Override public void onChangeSetApplied(boolean someFailureHappened, boolean streaming) { if ( someFailureHappened ) { indexWriterHolder.forceLockRelease(); } }
/** * Commits changes to a previously opened IndexWriter. * * @param errorContextBuilder use it to handle exceptions, as it might contain a reference to the work performed before the commit */ public void commitIndexWriter(ErrorContextBuilder errorContextBuilder) { IndexWriter indexWriter = writer.get(); if ( indexWriter != null ) { try { indexWriter.commit(); log.trace( "Index changes committed." ); } catch (IOException ioe) { handleIOException( ioe, errorContextBuilder ); } } }
public AbstractWorkspaceImpl(DirectoryBasedIndexManager indexManager, WorkerBuildContext context, Properties cfg) { this.indexManager = indexManager; this.optimizerStrategy = indexManager.getOptimizerStrategy(); this.writerHolder = new IndexWriterHolder( context.getErrorHandler(), indexManager ); this.indexMetadataIsComplete = PropertiesParseHelper.isIndexMetadataComplete( cfg, context ); this.deleteByTermEnforced = context.isDeleteByTermEnforced(); this.serviceManager = context.getServiceManager(); }
/** * Create as new IndexWriter using the passed in IndexWriterConfig as a template, but still applies some late changes: * we need to override the MergeScheduler to handle background errors, and a new instance needs to be created for each * new IndexWriter. * Also each new IndexWriter needs a new MergePolicy. */ private IndexWriter createNewIndexWriter() throws IOException { final IndexWriterConfig indexWriterConfig = createWriterConfig(); //Each writer config can be attached only once to an IndexWriter LogByteSizeMergePolicy newMergePolicy = indexParameters.getNewMergePolicy(); //TODO make it possible to configure a different policy? indexWriterConfig.setMergePolicy( newMergePolicy ); MergeScheduler mergeScheduler = new ConcurrentMergeScheduler( this.errorHandler, this.indexName ); indexWriterConfig.setMergeScheduler( mergeScheduler ); return new IndexWriter( directoryProvider.getDirectory(), indexWriterConfig ); }
public void closeIndexWriter() { log.closingIndexWriter( indexManager.getIndexName() ); writerHolder.closeIndexWriter(); }
final long openingGen = Math.max( readerGenRequiringFlushDeletes, readerGenRequiringFlushWrites ); final DirectoryReader newIndexReader = writerHolder.openNRTIndexReader( flushDeletes ); final DirectoryReader oldReader = currentReader.getAndSet( newIndexReader ); this.currentReaderGen = openingGen;
indexReader = writerHolder.openDirectoryIndexReader(); currentReader.set( indexReader );
/** * @see #commitIndexWriter(ErrorContextBuilder) */ public void commitIndexWriter() { commitIndexWriter( null ); }
@Override public void onChangeSetApplied(boolean someFailureHappened, boolean streaming) { if ( someFailureHappened ) { indexWriterHolder.forceLockRelease(); } else { if ( !streaming ) { indexWriterHolder.commitIndexWriter(); } } }
@Override public void onFlush() { synchronized (lock) { if ( openWriterUsers == 0 ) { indexWriterHolder.closeIndexWriter(); } else { lastExitCloses = true; indexWriterHolder.commitIndexWriter(); } } }
/** * Closes a previously opened IndexWriter. */ public void closeIndexWriter() { final IndexWriter toClose = writer.getAndSet( null ); if ( toClose != null ) { try { toClose.close(); log.trace( "IndexWriter closed" ); } catch (IOException ioe) { forceLockRelease(); handleIOException( ioe, null ); } } }
if ( indexWriter == null ) { try { indexWriter = createNewIndexWriter(); log.trace( "IndexWriter opened" ); writer.set( indexWriter ); indexWriter = null; writer.set( null ); handleIOException( ioe, errorContextBuilder );
@Override public void onChangeSetApplied(boolean someFailureHappened, boolean streaming) { if ( someFailureHappened ) { indexWriterHolder.forceLockRelease(); } }